I do exactly this by using DNS. You’ll want DNS on your home network to report back just the internal IP addresses for each host, but not the Tailscale IP addresses (that is, if you want the hostnames to work outside of Tailscale too).
Then for Tailscale’s DNS you’d set up records for the same hostnames but return either just the Tailscale IP addresses or both. I generally do both but it’s probably better to do the former to avoid leaks outside the WireGuard tunnels (though with a subnet router that probably won’t happen anyway).
This is much like traditional split DNS where your internal network’s DNS server is probably going to give internal IP addresses for a local web server’s hostname but a public DNS server would return a publicly routable IP address.
Avahi is going to be a huge pain because it relies on multicast. It won’t work over Tailscale (or traditional VPN tunnels other than an OpenVPN TAP interface) without lots of fighting.