How to maintain gpio state if esp8266 get reset or crash
You are correct, if the micro resets, the GPIO state will be lost.

You will need an external chip, but you need to make sure that any intermediate state of the micro's GPIO during reset does not update the external chip's state. This often means putting pull-up or pull-down resistors so that the GPIOs going high-Z doesn't trigger anything.

The external chip could be a shift register with an independently clocked output stage, such as the SN54HC595 or an addressable latch such as the 74HC259.

One other thing I suggest is to feed the outputs from the external chip back to additional GPIOs, set as inputs. This way, when your microcontroller reboots, it can read these GPIOs to see the actual state of these outputs.