List always does linear search, which is O(n), while hashset does it in O(1) - however, considering the significantly higher cost of calculating the hashcode even with a very fast hash function (which the RTL does not use) and the length of the string for a small amount of entries linear search beats a hashtable. In theory, if the entries are not changed that often, one could sort the list and use binary search. But that also requires a fast, optimized, inlined BinarySearch implementation, which the RTL does not have, IIRC.
P.S. Rapid.Generics.TList<T>.IndexOf is broken - line 19503 causes an endless loop. The same defect exists in InternalIndexOfRev.
How to repro:
procedure IndexOfEndlessLoop;
begin
var list := Rapid.Generics.TList<string>.Create;
for var i := 0 to 1 do
list.Add(TGUID.NewGuid.ToString);
list.indexOf(list[1]);
end;