This is a nested loop of inserts, so the asymptotic complexity is O(RowCount * len). If RowCount is large and the average len is large it will be a large number of INSERTs. Look at the execution plan to see what is going on in detail. I guess that it is compiled into a nested loop of INSERTS without any chance of an optimization.
Also check the transaction behavior. Is every INSERT a separate transaction or can it be grouped into one big transaction. The latter may be a lot faster.
I agree with Josef to the asymptotic complexity explanation that is related to the nested loop in your code. Correct me if I am wrong, but as far as I can see you are trying to retrieve all records from Table 1 that are not Null and the string 'word' is contained. Considering that the column name in Table 1 is 'words' and the string we are looking for is 'word' why don't you use SELECT as follows:
SELECT words FROM Table 1 WHERE words = 'word' AND words IS NOT NULL;
Then you can insert the results into Table 2 with INSERT INTO.