APNdroid works good, especially for me since my carrier has no 2G (shocking isn't it!?), all APNdroid does is adds "apnandroid" at the end of the APN address and removes it when you turn it back on. I use this alongside 3G Watchdog, when I reach a specific % of the monthly cap it runs APNdroid to prevent any further data usage.
As for wifi, Android should automatically switch itself to wifi when it's being used even if your phone shows "3G" in the status bar, so check the network section to ensure that's enabled.