1.Твой запрос нормальный.
Теоретически можно
SELECT b.id, b.name, COUNT(*) AS cnt
FROM board as b
JOIN options as o1 ON o1.item_id = b.id AND
(
(o1.option_id = 'model' AND o1.value IN ('Lanos','Transit','Rio'))
OR
(o1.option_id = 'color' AND o1.value IN ('Синий'))
OR
(o1.option_id = 'cond' AND o1.value IN ('Б/у'))
)
GROUP BY b.id, b.name
HAVING cnt = 3
, но не факт, что так будет лучше. Проверяй с помощью "explain" на реальных данных
2. Лучше innoDB, а не MyIsam
3. На больших нагрузках твоя БД сдохнет.
3.1. Нужен индекс по options.option_id и options.value (отдельные или составной или составной вместе с item_id). Опять же: проверяй разные варианты с помощью explain на реальных данных
3.2. options.option_id и options.value нужно делать числами, вынося текстовые значения в отдельные таблицы-справочники