Depends on the number of cities you have in your database. If it's a lot then you may want to use pre-pruning techniques to limit the search scope, like using pre-calculated 'zones' or limit search to 'cities of size X or larger,' etc. Since the cities don't move and populations and sizes don't change suddenly, think about how you can do as much pre-calculation as possible.
Another common technique is to have a separate 'nearby' table with distances from one city to those nearby. So all you have to do is find a nearby city to your current position and just show the cities that are nearest to that city.
Another trick worth emulating is that of UITableView, where it pulls info on-demand so at any given time, there are only the number of visible cells that need to be calculated. So instead of getting data on every city that is nearby, just try to limit the view to the 5-6 that are visible on the first screen and if you're allowing scrolling, fetch the rest as the user navigates up and down.
On a related note, here's a list of formulae for calculating distances between geopoints: http://www.movable-type.co.uk/scripts/latlong.html