Explanation
The key is this snippet:
ISNUMBER(SEARCH(things,B5)
This is based on another formula (explained in detail here) that simply checks a cell for a single substring. If the cell contains the substring, the formula returns TRUE. If not, the formula returns FALSE.
However, if we give the same formula a list of things (in this case, we are using a named range called "things", E5:E7) it will give us back a list of TRUE / FALSE values, one for each item in . The result is an array that looks like this:
{TRUE;TRUE;TRUE}
Where each TRUE represents a found item, and each FALSE represents an item not found.
We can force the TRUE / FALSE values to 1s and 0s with a double negative (--, also called a double unary):
--ISNUMBER(SEARCH(things,B5))
which yields an array like this:
{1;1;1}
Next, we process this array with SUMPRODUCT, which will give us a total sum. If this sum is equal to the number of items in the named range "things", we know we've found all things and can return TRUE. The way we do this is to compare the two numbers directly. We get a count of non-blank cells in "things" using COUNTA:
=COUNTA(things)
With a hard-coded list
There's no requirement that you use a range for your list of things. If you're only looking for a small number of things, you can use a list in array format, which is called an array constant. For example, if you're just looking for the colors red, blue, and green, you can use {"red","blue","green"} like this:
=SUMPRODUCT(--ISNUMBER(SEARCH({"yellow","green","dog"},B5)))=COUNTA(things)