Тогда, если учесть, что запросы могут быть какими угодно, вам надо будет на каждый запрос читать всю таблицу хотя бы для того чтобы отфильтровать(хоть самописное у вас, хоть oracle, хоть mysql) - т.е. читать 5Гб (это самый медленный момент во всей системе). Если взять скорость последовательного чтения(а случайное чтени + SSD вам не помогут, как мне кажется), то время чтения будет порядка 5Гб/150МБс т.е. около 30 секунд. Если предположить что записи меняются редко, то можно все это дело дополнительно сжать(зависит от реальных данных) - хранить записи не фиксированной длины - возможно еще процентов 15(или больше) экономии выжмется - итого 25 секунд. Можно применить RAID и ускорить еще в пару раз(или в большее - в зависимости от реализации) - итого получаем 15 секунд на запрос. Никакие стандартные кеши при последовательном чтении не помогут, но можно попробовать просто забить всю свободную память кусками данных - и к ним обращаться не с диска - это дает еще 2Гб в памяти и, на вскидку экономию в 30-40 процентов. Итого, мне кажется, 10 секунд - довольно хороший гарантированный и достижимый результат на почти любых фильтрах и запросах. Если есть заранее известные данные о фильтрации, то можно пробовать как-то по-другому оптимизировать.