The alternative would be to do each one separately and you will see the LEFT JOIN to table 3 is duplicated. I suspect however that if you look at the Execution plan for both your version and my version that they will be the same. The SQL Server Optimiser should be clever enough to figure out that both are doing the same thing and hence execute both in the same way. I find this slightly more readable than yours but that's my preference!
SELECT table1.timestamp AS timestamp,
table1.zid,
table1.aaa AS responses,
'aaas'
FROM table3
LEFT JOIN table1 on table3.id = table1.zid
UNION
SELECT table2.timestamp AS timestamp,
table2.zid,
table2.aaa AS responses,
'bbbs'
FROM table3
LEFT JOIN table1 on table3.id = table2.zid
ORDER BY timestamp ASC;