Some thoughts;
sometimes I include a where(1,1) as a 'do nothing' rule so that the rest of the query can use orWhere
If terms are words from the search box, then from a user experience, I would want the search to be more restrictive depending on how much I type. So, if I enter 'paul smith' I want to find
- paul smith
- pauline smith
- paul roger smithers
and not all the paul somethings and all the something smiths
If terms are a comma separated list then your approach may be ok.
I have a similar function on one of my sites and I decided that the best approach was to have a 'forsearch' column against each person. Not ideal, but I would have a column with 'paulsmith', 'paulinesmith', 'paulrogersmith' (to use my previous examples) and then take the user's search and replace all spaces with % so I would be looking for '%paul%smith%' in the forsearch column. This seems to work well for users.
Ideally I would use Algolia (or similar) but I need my SaaS revenue to ramp up first.