Adding two more conditions on the thread join should make it possible to use the forum_appr_last index, which appears to come with phpbb itself.
SELECT f.*, ft.mark_time, t.topic_title, t.topic_id, t.topic_last_post_id FROM (phpbb_forums f) LEFT JOIN phpbb_forums_track ft ON (ft.user_id = 2 AND ft.forum_id = f.forum_id) LEFT JOIN phpbb_topics t ON (f.forum_last_post_id = t.topic_last_post_id AND t.topic_moved_id = 0 and t.topic_approved=1 and t.forum_id=f.forum_id) ORDER BY f.left_id
Without t.topic_approved=1 check unapproved topics are displayed, which probably is not intentional.