Bit-banging is a technique where your code is actually doing the job manually of sending HIGHs and LOWs directly to GPIOs for both Data output (MOSI) and Clock and reading the Data input (MISO).
In other worlds, the software is emulating an SPI. It is of course slower than an hardware one.
In the case you wish, programming an AVR, it could become a tedious job, since probably you won't find existing code for it. Also, @lethe is right : you still need a fifth GPIO to drive the Reset.
This means your best solution is to use better ESP modules, such ESP-12E and use the Hardware SPI.
EDIT : In fact the RES pin is the fourth one, since Arduino ISP port doesn't need SPI-CS.
But still, the task would be difficult, taking care of the protocol, etc ! (even for me ...
)