Вы пишите медленно работает.
Где медленно работает? На локальной машине, на загруженом сервере хостинга?
Смотрите что у Вас сейчас происходит, сначала $dom->loadXml($data); загружает данные в своё внутренне представление, затем toArray переконвертирует это внутренне представление в массив.
Для начала попробуйте не вызывать toArray, а искать нужные поля через getElementsByTagName.
Хотите реально ускорения, пишите свой XML парсер, желательно на языке низкого уровня, например C++.