Looking for an iPhone app or script that turns off “Cellular Data” when on 2G and then BACK ON when on 3G

As some of you might know, 2G (GSM) or 2.5G (GSM/Edge) does not support data and calls at the same time. Using the Internet while on 2.5G and lower causes incoming calls be bounced.

3G does support data and calls at the same time by pausing Data while a call is received.

I am an architect, working in and around buildings under construction.

I usually get a low (2G) signal when I enter one and a good (3G) signal when I come out. Together with all the apps I have, the phone finds itself using my Internet connection when on GSM, causing calls to be dropped. I'm effectively unreachable.

I don't want to use 2G internet, only 3G. I would like cellular data to be on only when on 3G. My phone calls take priority over Internet connectivity when on 2G.


A left field suggestion:

Turn off cellular data and use a Mifi device (such as the Huawei E585) for your internet connection.
Yes this does mean another device and another SIM card, but you may be OK with that.

I've used this combination with an iPhone and it works really well.
You can leave the Mifi in your pocket, so forget it's even there (just remember to charge it!).
You get other benefits, for example it means using a laptop or tablet "in the field" is possible also as they'll be net-connected.