For a general solution, one that does not depend upon a given organization of the words in the first table, or lack of errors of form, and can work when the searched text is just... text, general text, the following is a good basic approach:
=INDEX($A$3:$A$100, XMATCH(1,ISNUMBER(SEARCH(D3,$B$3:$B$100)) * ISNUMBER(SEARCH(E3,$B$3:$B$100))), )
Basically, it makes a test for a match of each search term and creates an array of TRUE/FALSE values. The arrays (two here) are multiplied which firstly coerces those values to 1/0 values and secondly performs the multiplication. XMATCH
then looks for a value of 1 in the resultant array. (MATCH
produces the wrong value.) Used in the timehonored way with INDEX
you get the desired value. (SEARCH
will give a positional value for strings that are matched, and an error (see below) when there is no match. That's the basis for the tests.)
It will produce an #N/A
error for a case of no proper match for a pair of search terms. One can handle that as fits circumstances.
(Comments seemed to have taken a turn suggesting partial or "fuzzy" matching is actually desired. This formula will not help in the least with that. It COULD be used to take out the "low hanging fruit" and have more formula afterward (IF-THEN logic) that tries other approaches for the failures. That would cut way down on calculation time, perhaps.)