Без изменения результатов, я думаю, что это будет в 100 раз быстрее, если вы не сделаете дополнительный выбор из своей таблицы пользователей. Это не нужно вообще в этом случае.
Вы можете просто добавить LIMIT 100, чтобы получить только первые 100 результатов (или меньше, если нет 100).
SELECT SQL_CALC_FOUND_ROWS /* Calculate the total number of rows, without the LIMIT */
t.type_id, t.product_id, u.account_id, t.name, u.username
FROM
types t
INNER JOIN users u ON u.user_id = t.user_id
WHERE
u.account_id = $account_id
ORDER BY
t.type_id DESC
LIMIT 1
Затем выполните второй запрос, чтобы получить общее количество вычисляемых строк.
SELECT FOUND_ROWS()