Converting phone numbers to words with Python
Currently you are checking all possible combinations of letters and see if it is in your dictionary. It is easier to convert all dictionary words (of the right length) into phone numbers and see if each matches your number. This is especially true if you want to check multiple phone numbers (you only need to do this conversion once). In fact, you can completely pre-compute this by using a dictionary mapping from phone numbers to all (four letter) words in the dictionary.

import pandas as pd
from collections import defaultdict

INVERSE_PHONE_DICT = {"a": "2", "b": "2", "c": "2", "d": "3", ...}

def parse_dictionary(file_name):
    words_df = pd.read_csv(file_name, encoding='latin1')
    words = words_df[words_df.WORDS.str.len() == 4].WORDS.str.lower()

    word_numbers = defaultdict(set)
    for word in words:
        numbers = "".join(INVERSE_PHONE_DICT[c] for c in word)
        word_numbers[numbers].add(word)
    return word_numbers

if __name__ == "__main__":
    file_name = r'C:\Python\Scripts\Data_Playground\unix_words.csv'
    word_numbers = parse_dictionary(file_name)

    phone_number = '0000009376'
    for x in word_numbers.get(phone_number[-4:], []):
        print(f"{phone_number[:3]} - {phone_number[3:6]} - {x.upper()}")


Note that this does not deal with words of length other than four.

I also used collections.defaultdict for easy building of the mapping, used the fact that pandas.Series are directly iterable, used an f-string to simplify the string parsing at the end, completely removed the generate_words function, ensured that the words are of the right length and lower case, added a if __name__ == "__main__": guard to allow importing from this script and follower Python's official style-guide, PEP8, regarding spaces after , in argument lists.