I would say that the practical anwser is no. Although you could theoreticaly make an appliction/script that would swith to 2g before a cal, the script would have to wait a few seconds before making a call while the phone switches signals. This will make it no faster than manualy changing it before calling.
I suggest you put the 2g/3g widget near your dialer and press it before you enter the dialer, by the time you choose a contact the phone should be ready to call.
Another option has to do with rooting and voiding your warranty: flashing different modems(radio images) from xda. Some modems hold to signals much more aggresively (but use more battery).
The last and most obvious option (the one that I would choose in your place) is to just stay in 2g mode when in the city. Since the signal is so bad you drop calls I would guess that data speeds are slow and dropping too. You will also gain in battery life beacuse the phone won't be constantly searching and droping signals.
In any case I would consider changing the carrier if there is a better option where you live.