Bist Du dir sicher, das es hinsichtlich der Skalierbarkeit eine kluge Idee ist, die Suche in-Memory durchzuführen?
Wenn 'JA', dann suche die Listen einfach linear durch, denn dann hast Du nicht sonderlich viele. Wenn 'NEIN', dann verlagere die Suchlogik in die
DB und suche per
SQL, LIKE, Volltext oder mit Spacial Indexes. Nach dem Motto: "Überlasse die Arbeit dem jeweiligen Spezialisten" ist eben die Suche in einer Datenbank am Besten aufgehoben. Du merkst ja schon, was für Klimmzüge und umständliche Überlegungen du anstellst.
Wenn Du trotzdme in Memory suchen willst, erstelle Dir für bestimmte Suchoperationen, die oft verwendet und schnell sein sollen, spezielle Suchroutinen, z.B. indem Du dir eine Dictionary über die PLZ machst, wobei in jedem Dictionary-Eintrag widerum eine Liste der Kunden mit dieser PLZ steht.
Ich kann mir aber vorstellen, das eine einfache foreach-Schleife schnell genug ist, wenn Du maximal -sagen wir- 20.000 Kunden hast.
Ich persönlich würde mir aber lieber Gedanken über ein Control/Frame machen, bei dem Du komfortable Filtereinstellungen vornehmen kannst und dieses Control liefert Dir dann die richtige 'WHERE' Klausel deines
SQL-Befehls.
Alles andere wäre in meinen Augen "von hinten durch die Brust ins Auge".