i've mentioned this before and havent really gotten much of a response from other people who have tried this, but with my 3g, i "ping -t www.google.co.za" and this keeps the connection active in most cases. works for me.
The constant pinging wastes your bandwidth and although the pings might only be 32 bytes (default) thousands of 32 bytes add up quickly. Try running a ping with the following command which will drop the ping data down to 1 byte instead. ping x.x.x.x -l 1 -t (the letter after the - is L lower case)