Ваша история выглядит примерно так:
1. Я по непонятным мне самому критериям выбрал язык разметки как формат для хранения данных.
2. Задумался, что он таки не очень хорошо подходит для этой задачи
3. Я хочу продолжать использовать этот формат, но хочу избавиться от проблем.
Я думаю, вам стоит в принципе попробовать другой формат.
Например, если у вас имеется очень много данных, над которыми потом надо производить аналитику - вам может подойти формат Parquet - он изначально для бигдаты и спарка придуман.
Раз нужно много разных сортировок и фильтраций - можно попробовать, например, sqlite или другую, более полновесную СУБД.
Если всё-таки хотите остаться на XML, то посмотрите в сторону поточного чтения документа с последующим преобразованием в какое-то внутреннее представление, с которым ваша программа сможет работать эффективнее (по сути вы так изобретёте свою СУБД на минималках с индексами и эффективной структурой)
Для поточного чтения можно попробовать класс XMLReader
Но самая большая загвоздка в том что пользователь может фильтровать или сортировать записи по своему усмотрению (по алфавиту, по дате или по другим признакам) как мне тогда запомнить последний визуализированный элемент?
Нужно сортировать все данные, а не только те что показаны - тогда смещение будет работать ровно так, как ожидается