Primero busque la última publicación en cada categoría:
select topic_cat, max(topic_id) as latest_topic
from topics group by topic_cat
Luego añádelo a tus condiciones de unión:
SELECT c.cat_name AS Category, t.topic_name AS Recent_Topic
FROM categories c
left JOIN topics t on c.cat_id = t.topic_cat
left join (select topic_cat, max(topic_id) as latest_topic
from topics group by topic_cat) as latest_topics
on latest_topics.topic_cat = c.cat_id
and latest_topics.latest_topic = t.topic_id
where latest_topics.topic_cat is not null or t.topic_cat is null;