Convierta la fecha de nacimiento en un nombre de rango, luego haga un grupo por encima de eso con conteo:
select
case when age < 18 then 'Under 18'
when age > 50 then 'Over 50'
else '18-50' end as range,
count(*) as count
from (select DATEDIFF(yy, user_dob, GETDATE()) as age from Customer) c
group by case when age < 18 then 'Under 18'
when age > 50 then 'Over 50'
else '18-50' end
Al usar una subconsulta para convertir la fecha de nacimiento en un rango, el cálculo solo debe realizarse una vez por fila, por lo que debería funcionar mejor. Y es más fácil de leer.
Además, al evitar UNION, la consulta se puede ejecutar en una sola pasada sobre la tabla.