FreePBX has a Match field for extensions, but no static contact field. So I think you could make it work by putting the endpoint’s IP address in Match, and modifying the Dial string to, e.g. for extension 101,
PJSIP/101/sip:101@staticipaddress
Something for someone else to test I don’t know whether that would work with FreePBX’s dial plan.