偽のrownumソリューションは賢いですが、うまくスケーリングできないのではないかと思います(複雑なクエリの場合は、各行を結合して、現在の行の前の行数を数える必要があります)。
create table tmp as select /*your query*/
を使用することを検討します .create as select操作の場合、行を挿入するときに作成されるROWIDは、rownum(カウンター)とまったく同じであるためです。 SQLiteドキュメントで指定されています。
最初のクエリが挿入されたら、tmpテーブルをクエリするだけで済みます。
select rowid, /* your columns */ from tmp
order by rowid