Есть смысл сделать дополнительное поле - sequence, которое будет всегда содержать последовательные числа, ==>
ID sequence
1 1
3 2
5 3
10 4
Теперь чтобы достать данные для любой страницы задаем интервал для sequence, а не лимит, и обычный индекс тут будет рулить
Спустя 33 секунды добавил
А при изменении таблицы пересчет sequence выполняется одним запросом очень быстро