Bei Verwendung von Order By hilft auch kein Optimize, wobei ich mit "optimize for " noch nie einen Unterschied feststellen konnte.

Von der Reihenfolge wird der Order By erst am Schluss eines Selects ausgeführt, da das Ergebnis sortiert wird.
Entscheidend ist die Where-Klausel, dass es für diese einen Index gibt.

Dass dein 1. Versuch ohne Order By so schnell war, liegt u.U. am Cache, dass die Tabelle weitestgehend bereits im Speicher liegt. Das Ergebnis wird dann nach Satznummer präsentiert.
Ggf. ist auch das Parallelfeature installiert, wenn es inzwischen sowieso nicht schon Standard ist, was die Ausführung parallelisiert.

Der Optimizer versucht allerdings, wenn Order By und Where-Klausel passen, hier dieselben Felder, wird tasächlich ein temporärer Index erstellt, der dann durchsucht wird. Step 1 ist dann langsam, da dies nicht parallelisiert werden kann.

Visual Explain ist da schon mal hilfreich.

Wenn dir die Sortierung nicht passt, kannst du Ergebnisse auch per Multiple Row Fetch in ein Array laden und anschließend den SORTA bemühen:
https://www.ibm.com/docs/en/i/7.1.0?...tructure-array

Hier wird das Beispiel mit COBOL gezeigt, aber mit ILERPG und Qualaified sowie DIM klappt das auch.
Und der SORTA kann dann auf einzelnen Felder das komplette Array sortieren.
Das klappt auch mit einem %SUBARR, da das Array ja nicht komplett gefüllt werden muss.

Meist reicht da eine DS mit bis zu 16MB aus, wenn man nicht gerade einen "Select * ..." fabriziert.