Вам человек @opium заметил, что если вы знаете, например, какие в пароле могут быть символы (например, только русские и цифры и т.д.), то это может облегчить процесс подбора пароля. Если вам вообще ничего не известно, то брутфорс 20-ти значного пароля будет стоить много денег и займет много времени, спрогнозировать которые не возможно, но технически реализовать не сложно ;) Всё что вам нужно - распределенный крекер паролей, работающий на CPU+GPU одновременно под Linux.
Файл XLSX это zip-архив со стилями и данными файла. Вы можете средствами РНР разархивировать этот архив, и заменить файл первого листа теми данными, какие вам нужны. Внутри архива первый лист находится в /xl/worksheets/sheet1.xml. Этот xml-файл вы можете писать как с помощью библиотек РНР так и построчно выводом в файл с использованием fwrite. Ну а после завершения работы над листом сжать папку обратно в архив.
Возьмите одну строчку из базы и сохраните в файл, замеряйте расходы на память. Из этих расходов примерно четверть будет непосредственно затрачено на обработку строки, а 3/4 - это загрузка библиотеки + открытие и закрытие файла. Исходя из этих цифр сможете узнать, сколько вам нужно памяти на выполнение задачи по вашим требованиям.
А разбиение на несколько листов не даст никакого преимущества, ведь объект с данными будет один и тот же.