If I've understood well, you are talking about search pages and you want to search on a specific site, based on words you put in search. For example an input could be: projectLemon chris Evans, where projectLemon uniquely identifies the project
If the results are from one site, then for every word in search input, you search it in the project list - if it's found, redirect to search this specific site: The Url for searching can be easily modified: From http://projectserver.com/_layouts/15/osssearchresults.aspx could redirect to http://projectserver.com/projectLemon/_layouts/15/osssearchresults.aspx
If the results could be from multiple sites, then add to the project list another column (say aaaa), uniquely identifying the project (site) and on event receiver itemAdded, add this to the item - this can be done with content type receiver, thus you won't need to do it for every project subsite.
Then, again you modify the search input. For example,let assume that there are 5 high priority projects and Subdepartmen1 has 10 projects some with high priority and some with low priority. For input HighPriority Subdepartmen1, you go to the list and CAML the two parameters.Let's say you get 3 results, i.e. 3 items from project list.
You redirect (or show!)the same page with input the words : results[0].aaa OR results[1].aa OR a results[2].aa AND [and any other words]
The basic idea is to uniquely identify the items inside a subsite. The field aaa would uniquely identify them.
This solution would only need to add a field in content types, create event receivers and fiddle wit the search input. Yet, I believe it's not hard - time consuming, yes.