Ставим в начало скрипта:

Код:
ignore_user_abort(TRUE);
set_time_limit(0);
Второй вопрос следует раскрыть по подробнее... к примеру можно отдавать данные по байтно, но здесь все зависит от браузера, как он будет отображать информацию... если это будет браузер конечно..
P.S.: Важный момент, при нелимитированном выполнении и фоновом режиме скрипт становиться опасным, по этому следует не дать использовать его одним пользователем многократно в параллельном режиме, решается просто - с помошью файла, где именем файла является сессия пользователя, и устанавливается атрибут блокировки, flock(), где в конце выполенния скрипта данный аттрибут снимается... а в начале скрипта проверяется и создается...