Das liegt daran, dass du ausgerechnet die grausamste und sinnloseste Implementation einer Hashlist erwischt hast.
Delphi-Quellcode:
//Unit IniFiles
function THashedStringList.IndexOf(
const S:
string): Integer;
begin
UpdateValueHash;
if not CaseSensitive
then
Result := FValueHash.ValueOf(AnsiUpperCase(S))
else
Result := FValueHash.ValueOf(S);
end;
Vor
jeder einzelnen Suchanfrage werden ALLE Hashs neu berechnet.

Das muß zwangsläufig langsamer sein.
Ein Therapeut entspricht 1024 Gigapeut.