Конечно первый вариант. Базы ж не пересекаются, а для внесения правок напишите скрипты. Это гораздо будет дешевле, чем разбивать.
А вообще, что для вас Higload. 20 млн строк - это мелочевка. Помню я скорость тестировал на 1 млрд строк.
Нужны следующие данные:
1) размер строки
2) что чаще чтение или запись
3) какая допустимая скорость ответа
4) количество одновременных запросов
5) типы запросов
1) Посмотрите топ запросов к БД, самые тяжелые самые частые.
2) Раставьте индексы.
3) Кешируйте результаты тяжелых и частых запросов.
4) Проанализируйте нагрузку, может не хватает процессора или памяти.
Должно быть так:
1) при клике загрузки по ссылке /index и /aboutus грузиться генерируемая страница на сервере.
2) при переходе по ссылке должна грузится информация на AJAX
3) если JS отключен, то обычный переход по ссылке.
Нормально это сделать, через JavaScript и local storage.
При раскрытие записывайте, что меню раскрыто в переменную в local storage, затем при загрузки страницы проверяйте, есть ли в ней что-то если есть, то делайте раскрытой.