I have a few different ways of plugging in to the car.
1. This cable: http://www.ebay.co.uk/itm/281136716221 with my laptop which has a copy of the BMW diagnosis package ISTA/D on. I also have DISv57, INPA, WINKFP, NCSExpert and Tool32 for other jobs. With this you can do just about anything to the car. Update any of the modules on the car and make any coding changes.
This is hard to get working and requires patience as well as caution as it's very easy to completely f**k your car up. If you want to go down the route of having the complete BMW official toolset then you should start reading a few of the forums dedicated to it and go from there. (bimmerforums.com is a very good site for coding advice)
2. WiFi OBD2 dongle and a copy of the BMWhat iPhone application (http://www.ivini-apps.com/apps_detail_bmwhat_android.html). This is very easy to use and can read codes and code certain popular functions to the car. This is the best solution if you just want to do a few simple changes and read codes.
3. OpenFlash tablet (http://procedetuning.com/BMW/n54/Openflash/index.html). This can read codes and log data from the ECU which is a very useful tool for diagnosis. The main purpose of the device is remapping the ECU but I don't think they have any maps available for the 23i engine. The data logging function is incredibly useful, you can keep an eye on all sorts of parameters such as ignition timing and boost levels and have all the data saved to a csv file. Most people in the tuning community use a website called Datazap.me to upload of compare logs.
I don't know if the auto folding mirrors can be coded, I have heard people say it's not possible on several occasions. I have a SmartTop module which does that and also allows me to open the roof while moving. It's a nice addition to the car but costs a bit. I picked mine up for £100 off the previous owner of the car. Not sure I would pay full price for it.