Ну по сути, не меняя архитектуру оптимизировать можно только играясь с индексами. Следовательно посмотрите какие запросы у вас используются (какие поля при фильтре используются) и делайте для них оптимальные индексы.
Например, если у вас есть фильтр по жанру, году и альбому, то у вас должен быть запрос:
... WHERE жанр = "" AND год = "" AND альбом = ""
и соответствующий индекс:
CRAETE INDEX ... ON tabl(жанр, год, альбом)
И обратите внимание, что порядок важен, поэтому все запросы у вас должны иметь строго указаный в индексе порядок!
... WHERE год = "" AND жанр = "" AND альбом = ""
Такой запрос будет использовать только часть индекса.
Ну и прочие тонкости почитайте про индексы, на самом деле интересная задачка)