After thinking about it: The question is not sorted vs. unsorted List, but "Do you really need to compare EACH string with EVERY other String of the List"?
Basically it boils down to running through your List and compare each entry with every other entry.
Of the top of my head, i'd probably go along these lines:
2 Loops.
2 StringLists (initially identical)
Outer Loop: Take (current) entry of List1 and remove this entry from List2 (to avoid comparing it with itself)
Inner Loop: Run through List2 and do your comparisons. --> If you need to save the result you have to provide a place to store it (The associated Object of the StringList-Entry?) or you process the Result directly.
The result of the above is, that List2 shrinks consecutively, since you're removing the current entry from List2, and there is no difference in result for, e.g.
PartialRatio('Myrcia lengua','Myrcia sp3') and PartialRatio('Myrcia sp3,'Myrcia lengua') (commutative).
As i said: From the top of my head. Pretty sure someone else might chip in with something better.
btw: In my above example both Lists have to be in the same order (that's where sorted gives an advantage) and I'd run through both Lists Top-Down, since you'd always remove the last entry (no overhead moving memory around) in List2
EDIT: Maybe remove the "[SOLVED]" from the Subject?