Вообще, есть же агрегатная функция MAX, но поскольку её надо применять несколько раз, и нужен сам предмет, а не только цена - вряд ли будет лучше. А именно в этом запросе, действительно, LIMIT с сортировкой в подзапросах просится, т.к. иначе получается, что строится одна огромная таблица, а потом из неё получается одна строка.
Есть ещё подвох - что надо делать при одинаковой максимальной цене у нескольких предметов? :)