Indeed, this custom transfer functionality would not be ERC20 compliant and wallets wouldn’t be able to work with it. Think about it this way: wallets don’t have a “signature” field in the UI for ERC20 transfers, so users wouldn’t even be able to input the signature.
The only way I see of doing an ERC20 compliant “offchain” whitelist is to require users to submit the signature in a separate transaction to have their account whitelisted. From then on, as far as their account is concerned, the ERC20 token will act compliantly. However, if it’s each transfer rather than account that needs to be whitelisted, this will not work.
I don’t see a way to do a fully offchain whitelist for ERC20 transfers that does not require a pre-transfer transaction. If there is a way, it will be a very clever one.
It’s worth noting though that many wallets can actually work with arbitrary contract ABIs, and they can create a basic UI with input fields, such that if your contract has a custom transfer function with an extra signature field they would be able to use it. Although this is probably going to be a mediocre user experience.