25桁で連番で1000万件書き出す
桁数が決まってるのでバイナリアクセスで

filepos1 = rnd * 総レコード数
filepos2 = rnd * 総レコード数

この pos1 と pos2 を入れ替え
あとは好きな回数だけswapすればいいかと思います

すべての件をメモリに保持しないので仕様メモリは極小で済みますが、
ディスクI/O がかなり発生します。