Fastest way to compare objects in c#
===

I am writing an application that validates some cities. Part of the validation is checking if the city is already in a list by matching the country code and cityname (or alt cityname).

I am storing my existing cities list as:

    public struct SWCity
    {
        public int id;
        public string countrycode;
        public string name;
        public string altName;
        public int timezoneId;
    }

    List<City> cityCache = new List<City>();

I then have a list of location strings that contain country codes and city names etc. I split this string and then check if the city already exists.

    string cityString = GetCity(); //get the city string
    string countryCode = GetCountry(); //get the country string
    city = new City();             //create a new city object
    if (!string.IsNullOrEmpty(cityString)) //don't bother checking if no city was specified
    {
        //check if city exists in the list in the same country 
        city = cityCache.FirstOrDefault(x => countryCode == x.countrycode && (Like(x.name, cityString ) || Like(x.altName, cityString )));
        //if no city if found, search for a single match accross any country
        if (city.id == default(int) && cityCache.Count(x => Like(x.name, cityString ) || Like(x.altName, cityString )) == 1)
            city = cityCache.FirstOrDefault(x => Like(x.name, cityString ) || Like(x.altName, cityString ));
    }

    if (city.id == default(int))
    {
        //city not matched
    }

This is very slow for lots of records, as I am also checking other objects like airports and countries in the same way. Is there any way I can speed this up? Is there a faster collection for this kind of comparison than List<>, and is there a faster comparison function that FirsOrDefault()?