Es besteht kein Grund, den Cursor offen zu halten, da man mit einer korrekten Where-Klausel auf dem Schlüssel ja positionieren kann.
Um die Anzahl der Datensätze zu beschränken kann man ja "fetch first n rows only" verwenden.
Nach dem Laden der Sätze in die Subfile und beim Weiterblättern setzt man entsprechend neu auf.

Für das Rückwärtsblättern nimmt man dann einen 2. Cursor mit absteigender Sortierung und füllt die Subfile dann rückwärts (geht mit SFLINZ(nn) und entsprechenden Chain/Update).

Dies ist allemal performanter als mit so großen Resultsets zu arbeiten und man bekommt auch noch aktuellere Daten.
Wenn entsprechende Indizees vorligen ist das auch noch schnell, da die ODP's ja offen bleiben (nicht die Cursor).