ну собственно если без очередей
твоя задача максимально упростить генерацию
что бы быстренький запрос в бд
быстро гидрировался в массивчик и шаблонизировался в xml
с надеждой что это вся муть уложиться в таймаут
Можно потоком отдавать.
И собственно генерить потоком.
Читаем БД пачками, сериализуем пачку и выплёвываем в StreamedResponse
Так и timeout не наступит, и память можно после пачки чистить. В итоге хоть гигабайтами плевать можно.
Конкретную реализацию не подскажу, долго код искать, на старом проекте так генерил большие CSV.