THashedStringList steht nicht umsonst in der
Unit IniFiles. Die ist nicht dafür ausgelegt mit vielen Einträgen performant zu funktionieren sondern nur im Kontext der TMemIniFile (die das inzwischen auch nicht mehr benutzt, sondern ein TDictionary aus System.Generics.Collections).
Die zugrundeliegende Hashtable wird mit einer festen Anzahl von 256 Buckets erstellt - d.h. bei 2mio Elementen wird aus einem theoretischen O(1) ein O(n).
Vergiss einfach, dass du jemals von THashedStringList gehört hast und benutz ein TDictionary aus System.Generics.Collections.
P.S. Ähh, Delphi 2007 - musst du dir was eigenes bauen, oder du modifizierst THashedStringList, dass sie mehr Buckets baut. Allerdings wirst du da auch nicht wirklich auf einen grünen Zweig kommen, da das intern ein bisschen verwurschtelt ist (hab hier grad nur XE als ältesten Sourcestand).