Ответ в исходниках. не знаю как в 4.8, в 4.7.2 явно видно, что сначала идет копирование, а потом затирание исходного файла. Отсюда и фрагментность файлов и лишняя работа на ж.д.
Не знаю насколько медленно извлекать множество файлов из zip по одному, но судя по всему побыстрее чем в rar-ах, в qzip.cpp:
int start = readUInt(header.h.offset_local_header);
//qDebug("uncompressing file %d: local header at %d", i, start);
d->device->seek(start);
так что по идее это должно работать быстро, раз считывание архивного файла происходит с заданной позиции...