Your phone uses a different type of connection (DUN) to send tethered data but you can make the provider treat all traffic as if it is non-tethered:
adb shell settings put global tether_dun_required 0
When enabling tethering on Android, the OS will first do a provisioning check with the carrier to determine if your plan allows tethering. You can remove this check:
adb shell su
mount -o rw,remount /system_root
cd /system_root/system/
echo net.tethering.noprovisioning=true >> /system_root/system/build.prop
However it will not be enough because carriers often spot tethering by looking at the TTL of your IP packages.
Time to live (TTL) refers to the amount of time or “hops” that a packet is set to exist inside a network before being discarded by a router. It is decremented for each hop. A hop is any intermediate router the packet passes through.
When tethering, your phone acts as a router and your TTL is decreased by 1 before reaching your ISP, which is what betrays you.
By default, Android and iOS have a TTL of 64 so you only need to set the TTL on your PC to 65.
On GNU/Linux :
net.ipv4.ip_default_ttl=65
# persistent change
echo 'net.ipv4.ip_default_ttl=65' | sudo tee /usr/lib64/sysctl.d/70-ttl.conf
On Windows:
netsh int ipv4 set glob defaultcurhoplimit=65 netsh int ipv6 set glob
defaultcurhoplimit=65
On MacOS:
sudo sysctl -w net.inet.ip.ttl=65
For now it seems to be enough but keep in mind that your carrier has other ways to detect tethering (see here) and will most likely use them in the future.