1. попробуйте начинать писать документ клиенту в Web Response Stream еще до того как полностью сформируете файл. То есть итерации вашего цикла должны работать со стримом вместо StringBuilder'а.
2. попробуйте сначала все записать во временный файл опять же через Стрим, а после перенаправьте файл стрим в стрим ответа клиенту.