Paul,
The suggestions you have gotten so far have all been all excellent. I will add one more idea in the mix in case it might better suit your problem.
I like to use the assignments in MMA to make a dictionary. For example, you can enter
junk["one"] = {12}
junk["two"] = {4,8}
You can see all of your assignments with ?junk or Definition[junk] or programmatically with DownValues[junk].
The advantage is that you do not need to create new symbols manually or manage them. Using Marco's example (but making a string out of it since I think you said you are handling large strings)
Set up some lists:
In[6]:= names = RandomSample[WordList[], 10]
Out[6]= {"steps", "highlight", "puppeteer", "cleanness", \
"credential", "nonstarter", "ablaze", "telegraphically", "stoppage", \
"heads"}
In[7]:= tableentries =
Table[StringRiffle[RandomChoice[names, 4], " "], 20]
Out[7]= {"cleanness cleanness ablaze heads", "telegraphically \
nonstarter credential credential", "cleanness credential \
telegraphically stoppage", "stoppage heads heads telegraphically", \
"puppeteer ablaze nonstarter telegraphically", "telegraphically \
stoppage credential nonstarter", "telegraphically steps ablaze \
cleanness", "credential stoppage ablaze credential", "heads \
nonstarter puppeteer stoppage", "cleanness ablaze highlight \
cleanness", "ablaze heads nonstarter highlight", "ablaze nonstarter \
heads heads", "stoppage nonstarter steps heads", "cleanness cleanness \
ablaze telegraphically", "nonstarter telegraphically credential \
stoppage", "ablaze puppeteer nonstarter cleanness", "highlight ablaze \
cleanness cleanness", "puppeteer cleanness puppeteer ablaze", \
"stoppage nonstarter stoppage highlight", "credential heads \
credential ablaze"}
To create the dictionary programmatically create a function to assign the dictionary value, testing if its the first time it is used -- either set the first value or just append the latest value.
tmpify[x_String, val_] :=
If[Head[tmp[x]] === tmp, tmp[x] = {val},
tmp[x] = Append[tmp[x], val]]
Now you can use it by first clearing all old entries in tmp and then mapping the function over the table of values and Map it a second time over the list of names to give the location of every name in every string in the table:
Clear[tmp]
Map[Function[name,
MapIndexed[
If[StringCount[#1, ___ ~~ name ~~ ___] > 0, tmpify[name, #2[[1]]],
Nothing] &, tableentries]], names];
This is the result:

This approach would be very fast when doing many lists and it would be easy to reference the result either with
tmp["steps"]
or
tmp[names[[1]]]
I hope this helps.
Regards,
Neil