2Гб база - это не много.
Нужно смотреть в сторону нормализации модели базы.
Left / Right JOIN запросы не критичны, вот Inner / Outer очень сильно могут подпортить производительность. На моей практике денормализировать и партицировать модель для предотвращения JOIN'ов приходилось только при работе с 30Гб+ табличками.
Выносить БД на B-tree в память нет смысла, проще использовать Redis или hashtable индексы.
В случае с MySQL у InnoDB есть встроенный кэш для ключей первого порядка...
Вам нужно просто прикрутить нормально кэш второго уровня типа memcached или ehcache и не заморачиваться.
Как сказал
@affka полнотекстовые поисковые движки нужны 100%.
Лично мне Sphinx не очень нравится, больше склоняюсь к Solr / Elastic Search и к встроенному полнотекстовому движку PosgreSQL.
Можно почитать
это и
это.
Для PostgreSQL можно глянуть
это
Также желательно помнить про VACUUM и пользоваться pg_reorg для предотвращения блокировок.
В принципе ваши проблемы 100% решаются EXPLAIN'ом и нормальным кэшированием с нормализацией модели.
Шардинги / репликации и партицирование слишком большой геморой если не решены самые элементарные вопросы. Тем более что у MySQL что у PostgreSQL master-master репликация вообще не торт. Это "План Я" для любого проекта.