Seaching/Filtering by REGION

Seaching/Filtering by REGION

I currently have approximately 44,000 Candidate records.  They all have City Name and Zip Codes.
I want to be able to select Candidates by Region, for example, anyone in the Bay Area, or anyone in Downtown San Francisco. (So there are multiple non-contiguous Zip Code ranges and multiple City Names).
Other than creating a User-Defined Field and manually Mass-Updating that field, does anyone have a better solution?
Any API Developers have a solution?