I have 3Amp (max) 12v DC brushed motor and power supply. I'm thinking of turning this motor on/off and (maybe) control its speed with a transistor. I'm not an expert in electronics at all (I'm a programmer). Another variant is using relay, but I see transistor as a better solution. To control transistor I want to use Arduino signal. So I tried to search for a transistor that can maintain 12v and 3amp and use signal of 0-5v, but it seems there are no such transistors. So my question to you - is my way of solving this problem is right? Or should I use relay for it (but obviously I can not control the speed of the motor with the relay).
Consider that DC motors can have start currents up to 10x rated currents, you either must have a soft start or drivers rated those currents and Pd heat loss from voltage drop.
Consider a 3A * 12V motor uses 36W at full load but 360W (peak) at start if full voltage is applied. Losses of <2% are desirable for thermal design but also affect the cost of the drivers, so tradeoffs are required.
A full bridge is used for bi-directional control.
Depending how you control the soft start (acceleration) with coasting or braking and you can decide what power you need. When coasting the motor turns into a generator.
e.g of a high power driver. https://www.pololu.com/product/1451
Cheap and hot driver
Use a MOSFET as a switch. MOSFETs have high switching frequency and can pass high current through them. Use a flyback diode to prevent the back emf of the motor from damaging the Arduino.