¿La mejor manera de comparar el final de una cadena, usando DERECHO, ME GUSTA u otro?

Necesito comparar el final de las cadenas con una lista de posibles terminaciones en un procedimiento almacenado. Se llamará mucho y hay alrededor de 10-15 finales de candidatos. En este punto, una solución de solo código es preferible a crear tablas dedicadas a esto. Algo que sería como:

IF (ENDSWITH(@var, 'foo') OR
    ENDSWITH(@var, 'bar') OR
    ENDSWITH(@var, 'badger') OR
    ENDSWITH(@var, 'snake'))
(
)

Estoy buscando la mejor manera en términos de velocidad, pero también de mantenibilidad. Los candidatos que conozco son

RIGHT, mi favorito hasta ahora, pero significa que tengo que codificar la longitud de la cadena, por lo que puedo ser propenso a errores. También significa cortar la cadena de origen muchas veces.

IF ((LEN(@var) >= 3 AND RIGHT(@var, 3) = 'foo')) OR ...

LIKE, probablemente más lento, pero un poco más limpio

IF (@var LIKE '%foo') OR ...

CHARINDEX, probablemente más lento ya que busca en toda la cadena

SUBSTRING, probablemente equivalente a DERECHA y mucho más feo

SQLCLR para crear mi propio ENDSWITH, puede ser bastante rápido

Puede haber mejores formas que no conozco. ¿Qué piensas

Respuestas a la pregunta(3)

Su respuesta a la pregunta