The problem you can run into with MOSFETs is they require a gate voltage of a certain level for them to fully turn on.
This is why we often say use a logic level MOSFET when 5v Arduinos are involved.
When it comes to a 3.3v Arduino, there are fewer MOSFETs that fit this bill.
BJTs require current (not a voltage) to switch.
Often a BJT is used as a front end switch for a MOSFET if the MOSFET is a 5v logic level transistor.
MOSSFETs are quite affordable, the AO3401 SOT23 is about $5.00 for 100 pieces on eBay.com.
I use IRLML6402 MOSFETs for high side switching\powering of stuff like GPS, Radio modules etc on 3.3V Arduinos and they work fine, even the real cheap ones on Aliexpress.
The superbeta, very low saturation voltage ZXTN2018 and ZXTP2027 are handy, 5A/-4A rating and happen to be ultra-ultra-low voltage noise too. They are the surface mount equivalents for ZTX851 and ZTX951 (eline package).