I don’t know if it will work in your case, but when I’ve come across this, I’ve inserted dummy/default values if there isn’t an actual value, using the ternary operator within the parameter expression. It solved the problem.
Where I've used it, the parameter is for display/SEO purposes rather than functional (eg query parameters), eg /{{(author?author:'no author').stripTags(). etc
Nevertheless, I would have thought you could use any of the examples you listed.
OK, I’ve just come to realise something about routes with parameters. If I have a route such as mentioned above
path: "/people/:people_id?"
and then I want to add an additional parameter like this
path: "/people/:people_id/:business_id?"
then I must go back to ALL occurrences that use this route path and add the additional parameter value even if it has to be a dummy value otherwise the links will fail to find the page and will return a 'status of 404 (Not Found)'
I would imagine that you people and business IDs are both integers so setting a letter as the default ensures no match - you might just need to handle this on the page.
That way you could look up a person, a business or a person belonging to a business