You will probably need to find several geocoding services and write your own wrapper class that uses an algorithm to select which one to use, how to use it, and how often to use it. Be careful with this though, for example, I believe that Google requires you to show the geocoding results on a Google map (can't find the reference right this moment).
In addition to Google and the others mentioned in this thread, here are a few services you could look into:
http://developer.yahoo.com/maps/rest/V1/geocode.html
http://www.maxmind.com