The two LEFT JOIN are multiplying your results, giving you 6 results for user 1 (3 cars x 2 bikes).
You can use DISTINCT in GROUP_CONCAT to fix the duplicates.
From the docs:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
It would look like this:
SELECT
user.id,
user.username,
GROUP_CONCAT(DISTINCT cars.name SEPARATOR "##") AS cars,
GROUP_CONCAT(DISTINCT bikes.name SEPARATOR "##") AS bikes
FROM user
LEFT JOIN cars ON user.id = cars.id_user
LEFT JOIN bikes ON user.id = bikes.id_user
GROUP BY user.id