Si no desea (explícitamente) usar tablas temporales, esto funcionará:
SELECT id FROM (
(SELECT 1 AS id) UNION ALL
(SELECT 2 AS id) UNION ALL
(SELECT 3 AS id) UNION ALL
(SELECT 4 AS id) UNION ALL
(SELECT 5 AS id)
) AS list
LEFT JOIN users USING (id)
WHERE users.id IS NULL
Sin embargo, es bastante feo, bastante largo y tengo dudas sobre cómo funcionaría si la lista de identificaciones es larga.