Word Search solving algorithm
You are creating lots of Point() objects. For performance optimization in Java the very first thing is to avoid pressure on the garbage collector.
You are doing lots of repeated calculations just for traversing the grid (in several directions). Performance wise it would be much better to transform the whole grid in advance to simplify the traversal calculation. E.g. it is very simple to search only words in East direction in a grid. And searching words in West direction could then be done by mirroring the grid against a vertical axis and searching again in East direction only.
For just finding words, you can ignore the grid structure entirely. Take the complete first row as String, append a space, append the complete second row as String and so forth. You get one huge string representing the grid for searching in East direction. Your matching code is simply hugeString.contains(searchWord) (with a bit more complicated calculation of the original row and column information). You can do the same transformation from grid to a single String also for all other directions.