Поместите второй запрос прямо в первый:
SELECT id, name, address,
(SELECT COUNT(DISTINCT prod_name) nr_of_prod
FROM menu
WHERE menu.id = restaurant.id
) nr_of_prod
FROM restaurant
WHERE accepted = '1'
ORDER BY id DESC
Кроме того, почему вы используете какой-то класс пагинации вместо MySQL LIMIT
?
Вы также можете написать это так (укажите профиль и выберите, лучший зависит от размера таблицы):
SELECT id, name, address, nr_of_prod
FROM restaurant JOIN
(SELECT id, COUNT(DISTINCT prod_name) nr_of_prod
FROM menu
GROUP BY id
) nr_of_prod USING (id)
WHERE accepted = '1'
ORDER BY id DESC