Ja, dieses Verhalten ist für for-Schleifen definiert, deshalb sind diese auch schneller.
Der Compiler optimiert Schleifen nach Möglichkeit so, dass gegen 0 gezählt wird.
Das spart noch mal einen Vergleich je Durchlauf, das sieht dann übersetzt im Prinzip so aus:
Delphi-Quellcode:
n := sl.Count - 1;
for i := n downto 0 do
sl.Add((n - i).ToString);