One way to accomplish this is with a junction table that is populated by a custom script. Creating the junction table is straightforward. Create a new table with two linked record fields, one for each original table.
Figuring out the script to identify matches is much harder. Not only would it require someone familiar with scripting, it requires a method for determining what constitutes a partial match. While there are coding libraries that help with identifying fuzzy matches, you cannot use coding libraries in scripting. Thus the logic needs to be built in the script. For example, do you want a strict number of words in common? Or a percentage of words in common? How close to words need to be to each other—would “books” and “booked” be close enough?