You could use openstreetmap with pgrouting in postgis if all you care about is rough estimates. If you are just doing city to city then you really don't have to worry about geocoding all that much since the lat longs cities is fairly well know.
If your service is constrained to England I would keep a large DB table of the combinations for the pairwise distance of the top 5000 cities. Compute it once offline using pgrouting and then call that when the request comes in. This would make the app much much faster for most of your users.
All the major map players have routing APIs (Yahoo, Bing, MapQuest, Nokia)
You could also look at deCarta for the same kind of service. They were the LBS engine behind Yahoo and Google for quite some time.
[update] if you are just doing this for a rough estimate do you really need to do routing or can you just do straight line distance. Straight line is much much simpler to solve. You just need the lat longs for the centers of the cities without the street network data or doing the routing calculations.