Dolphin is very close to having the capability that you are interested in but it is not quite there. It seems like the zip search was done as a convenience feature which ultimately limits its usefulness. There are a few pieces to the equation as far as I can tell and one minor adjustment could really make the feature useful.
1) You should use the google api rather than geonames. The google api has no limits on distance you want to set your radius to and just seems to work better.
2) Its a good idea to ad a "state" field to your profile and add state to the world map parts table entry for profile. This gets over the issue of people being being incorrectly associated with the wrong geographical location when a city name exists in more than one state of a country.
3) When a user registers or updates their location, the world map functionality uses the google api to look up the user's longitude and latitude based on the data provided and the world map parts configured for profiles. Since the location info is specific to the user you don't really need to be loading tables of zip codes and corresponding locations. Depending on the needs of your site you could theoretically make the location as accurate or fuzzy as you like. In some places, a single zip code identifies a building or portion of a building so to avoid giving the user's actual location away you might instead want to limit the location lookup to the city.
4) Here's the part that is missing, or is at least a little under-cooked. When a user does a "location" search, what should actually be happening is that the search form would query the google api based on whatever location information you give it and a search radius. The location information could either be the user's location as determined by the lng & lat info for their profile or be based on location information that the user provides (country, state, city, zip, etc.). If the latter, then the search would look up the corresponding coordinates for the location information provided. Then a standard map radius query against the user's profiles would take place. This seems so straightforward and obvious that I can only conclude that zip search and the concept of "location" in the current search form are remnants of state of map searches many years ago or that there is some other complexity that I am overlooking.