I did something similar time ago. You should take advantage of the fact that words are a ordered set of characters. So, you perform a linear search over the matrix for the first letter, then you recursively call the directional search.
To simplify computational complexity you can add some constraint, eg,
if word.length > number of characters on that direction don't start searching.
The recursive function signature would be like:
boolean search(string word, int direction)
with terminal case
if (word.length==1) return isNextLetterInDirection(word, direction);
and the search being
search(substring(word, 0, word.length-1), direction);
This algorithm also cover palindrome cases and words including their syllables.