у вас действительно 100 записей в таблице???
именно поэтому я предлагаю урезать объем отбираемых данных
1. В первую очередь нужно избавится от limit, если записи растут с единицы, и выборка проводится последовательно по записях то применяйте не лимит а where выражение, но это только возможно если счетчик идет непрерывно
2. если записи идут как попало и невозможно применить п. 1, то следует использовать кеширование, напр. в простейшем виде - при запросе от и до обращаться к табл. где будут указаны id выбранных записей, если таковой нет - то создать, конечно с понятных причин первый такой запрос будет выполнятся долго, либо насильно генерировать такие запросы для пагинации
И совершенно непонятно, зачем брать абсолютно все данные и их потом переворачивать