Converta a data de nascimento em um nome de intervalo e, em seguida, faça um grupo por cima disso com contagem:
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
Ao usar uma subconsulta para converter a data de nascimento em um intervalo, o cálculo só precisa ser executado uma vez por linha, portanto, deve ter um desempenho melhor. E é mais fácil de ler.
Além disso, evitando UNIONs, a consulta pode ser executada em uma passagem pela tabela.