Как грамотно считать данные с большого XML файла?
Обычная проблема. Для больших файлов используется XMLReader, а не SimpleXML.
Он не пытается пережевать весь файл сразу, а читает его построчно.
 3) полученные объекты превращал в массив с помощью конструкции json_decode(json_encode(<объект из шага 2>), true), именно этот пункт забирает очень много производительности по оперативке.ваша проблема тут!

Зачем вы это делаете? ассоциативные массивы объективно медленнее чем работа с объектами, и даже если надо, всегда можно на конкретном уровне написать (array)$obj и работать с уже массивом полей объекта, так же foreach прекрасно работает с полями объекта как с элементами массива.

p.s. и самое главное, не работайте на сайте с xml, преобразуйте данные в более удобный для php вид, к примеру serialize или даже var_export (делает код php инициализирующий массив, его можно просто include или eval), делайте это в момент загрузки xml файла на сайте админом, а уже при работе с данными подгружайте файл удобным способом.

Ну и классика - данные нужно хранить в базе данных (загружать медленнее но зато работать быстрее всего)