After many hours of breaking my head into the wall I think I found the solution for (1) and now it will be easier to find solution for (2).
SELECT
C.id,
C.name AS category_name,
C.order AS category_order,
T.*
FROM forum_categories AS C
LEFT JOIN
(
SELECT
T.category_id,
T.id AS topic_id,
T.name AS topic_name,
P.user_id,
P.username,
P.date
FROM forum_topics AS T
LEFT JOIN
(
SELECT
P2.id AS post_id,
P2.topic_id,
P2.user_id,
P2.date,
U.username
FROM forum_posts AS P2
LEFT JOIN users AS U ON P2.user_id = U.id
ORDER BY P2.id DESC
)
P ON P.topic_id = T.id
ORDER BY P.post_id DESC
)
T ON T.category_id = C.id
GROUP BY C.id
Edit: Fixed a little bug in the (1) query and here is the (2) for those which want to accomplish the same as me:
SELECT
T.*,
P.*
FROM forum_topics AS T
LEFT JOIN
(
SELECT
P2.id AS post_id,
P2.topic_id,
P2.user_id,
P2.date,
U.username
FROM forum_posts AS P2
LEFT JOIN users U ON U.id = P2.user_id
ORDER BY P2.id DESC
)
P ON P.topic_id = T.id
WHERE T.category_id = '1'
GROUP BY P.topic_id
ORDER BY P.topic_id DESC