The issue with the expression you're trying is that custom search parameter expressions don't support "where()" clauses (except in the specific case of extension URLs, since that is a common pattern). The limitations should hopefully be clear from https://cloud.google.com/healthcare-api/docs/how-tos/fhir-custom-search#expression
Emulating the exact functionality of :of-type with custom searches is not quite possible. You can define an expression that walks into that sub-field, e.g. Person.identifier.type (a CodeableConcept so as a token parameter it will support system|value, or pointing the expression to Person.identifier.type.coding.code is an option if you only care about the code), and then search by Person?my-identifier-type-param=[system|value] but this doesn't combine with the value of the identifier the way of-type does.
If you did a search for Person?identifier=[value]&my-identifier-type-param=[system|value], this risks unintended matches if an individual resource has multiple identifiers, one of which matches identifier=[value] while another matches my-identifier-type-param=[system|value]. If you can constrain the assumptions of the use case so that doesn't happen, this may still be viable as a workaround.
Alternately, as Erik points out there are a fair number of use cases where the identifier system aligns with the type so searching by system is sufficient.
Support for :of-type is not currently on the roadmap. It is being tracked but has not come up often as a priority for customers.