I like coalesce for this sort of thing (it will fill-in your target with the first non-null value). You can have sy-langu as default and more languages in order of precedence:
SELECT SINGLE coalesce( default~eqktx, greek~eqktx, english~eqktx )
FROM equi AS e LEFT OUTER JOIN eqkt AS default
ON default~equnr = e~equnr
AND default~spras = @sy-langu
LEFT OUTER JOIN eqkt AS greek
ON greek~equnr = e~equnr
AND greek~spras = 'G'
LEFT OUTER JOIN eqkt AS english
ON english~equnr = e~equnr
AND english~spras = 'E'
WHERE e~equnr = @ls_equi-equnr
INTO @DATA(lv_eqktx).
Your example would become:
SELECT coalesce( default~name, english~name ),
coalesce( default~text, english~text ),
coalesce( default~lang, english~lang )
FROM texts AS default LEFT OUTER JOIN texts AS english
ON english~name = default~name
AND english~lang = 'E'
WHERE default~name IN @r_names
AND default~lang = @lv_lang
INTO TABLE @DATA(lt_texts).