Well if you're trying to get field values out of Search A index=a sourcetype=sta , and you want to use the field values in there to run another search B, and A might run into the millions of rows, then you can't use a subsearch.
I do however think you have your subsearch syntax backwards. The "first" search Splunk runs is always the inner one, and if I'm reading your question right that would be the index=a sourcetype=sta search. Therefore I think your hypothetical subsearch would look like:
index=b sourcetype=stb [ search index=a sourcetype=sta | rename employeeID as empID | table empID] table empID empAddress]
But again, the inner search will get truncated at 50,000 rows as you say so you can't use subsearches, join, append, etc...
However here's the good news:
1) Just get all the events and let stats sort them out.
(index=b sourcetype=stb empAddress=* empID=* ) OR (index=a sourcetype=sta employeeID=*) | eval empID=if(isnotnull(employeeID),employeeId,empID) | stats values(empAddress) by empID
2) If the search above seems to slow (because it gets many events off disk), then just run it once, or maybe once a day/week, to put the employeeID to EmpAddress mapping in a file based lookup.
Then you'll be able to run very efficient lookups to go from ID to address for your searches going forward.
Basic idea is same as #1, except you tack something like | outputlookup employeeAddresses on the end.
further reading about lookups -
1) http://docs.splunk.com/Documentation/Splunk/6.2.2/Search/Useexternalfieldlookups
2) http://docs.splunk.com/Documentation/Splunk/6.2.2/Knowledge/Usefieldlookupstoaddinformationtoyourevents
... View more