Using bitcoind, is it possible to set a specific fee with sendtoaddress? For example, setting the fee to exactly 1000 sats or 300 sat/kw?
You cannot set an absolute fee, however you can use the settxfee RPC to set the fee rate for the wallet before you make the transaction. Note that this isn't persisted in the wallet and is only held in memory, so you will need to do it again if you restart Bitcoin Core or reload the wallet.

In the next major release of Bitcoin Core, version 0.21, you will be able to set the fee rate in sendtoaddress itself.