Well you need to make sure that when you power up the ESP, GPIO0 is either pulled up or free-floating to make it go into normal boot-mode, or pulled down at power up to make it go into flash-mode. A (semi) permanent solution is done with a switch the same way you've done with the RST pin.
The GPIO pins on the ESP are not 5v tolerant. The Arduino uses 5v logic. To prevent the Arduino from damaging the ESP, you should use a voltage divider (or a level shifter) on the line that receives data (the ESP's RX pin) as such :
Arduino => 1K => ESP-RX => 1K => 1K => GND
Like that any 5v signal from the Arduino will be reduced to 3.33v on the ESP