If you want an ELM327 adapter for BMWhat then make sure it's V2.1. That will allow you to code all modules, not just a select few. The BMWhat certified adapter is just a rebadged ELM327 V2.1, nothing special.
I have this one and it works fine: http://www.ebay.co.uk/itm/TORQUE-ANDROID-Super-Mini-ELM327-V2-1-OBD2-OBDII-Bluetooth-Adapter-Auto-Scanner-/141712512778
I don't know if a bluetooth or wifi adapter will work using NCSExpert or any of the BMW programming suites. Personally I would stick with using a cable.
The cables are a lot faster and more reliable for programming, BMWHat (or Carly as it's now called) is so much faster with a cable. If you want to do anything like full module flashing with WinKFP then you really don't want to risk using an ELM327.
If you want a cable then this is one of the most reliable UK sources: http://www.ebay.co.uk/itm/BMW-USB-OBD-K-Dcan-Diagnostic-Cable-Switched-UK-INPA-DIS-SSS-NCS-Coding-/271796230565
Cable-shack have a really good reputation in the coding community. You can find lots of cables floating around £20 that claim to work but many including myself have tried and failed with them.