PequeñoMauro tiene razon, solo algunas observaciones:
En la consulta pones Ofertas.*, esto no es conveniente, y menos en un UNION mejor identifica los campos que vas a necesitar de la tabla Ofertas, por otro lado la segunda consulta del union:
Código:
SELECT Ofertas.*, Empresas.Nombre
FROM Ofertas
INNER JOIN Contratacion_Destinos
ON Ofertas.ID_DESTINO = Contratacion_Destinos.ID_DESTINO
INNER JOIN Contratacion_Servicios
ON Contratacion_Destinos.ID_PARAMETRO = Contratacion_Servicios.ID_PARAMETRO
INNER JOIN Empresas
ON Ofertas.ID_Empresa = Empresas.ID_EMPRESA
WHERE (ofertas.tipo_oferta = 1) and (Contratacion_Destinos.Activo = 1)
AND (UPPER(Contratacion_Servicios.Parametro) = 'OFERTADESTACADAS' OR UPPER(Contratacion_Servicios.Parametro) = 'OFERTADESTACADAM')
AND (Contratacion_Destinos.FechaProrroga > GETDATE())
ORDER BY Ofertas.Fecha DESC
haces un Join contra la tabla
Contratacion_Servicios, y no muestras info de esta, te aconsejo que evites al máximo las clausulas Joins ya que son muy pesadas para el servidor por que utilizan tablas temnporales para evaluar el conjunto de resultados, mejor utiliza un EXISTS y veras la mejora en el rendimiento de tu consulta
Saludos!