A full example would have been useful to allow others to experiment with your source code.
Another option which some commercial BLE products seem to use is to require the client to write something e.g., secret to one characteristic within a certain time and disconnect the client when this does not happen.
Of course, this does not provide a lot of security.
When you try this with a generic BLE app you will find that nothing seems to have changed. The reason is, they all scan the server only once when they connect. They do not expect services and characteristics to be added after connecting.
I modified a sensor sketch for an ESP32 an added a new characteristic when a sensor value was triggered. I wrote a sketch for another Arduino that scans the services and characteristics in an interval without disconnecting. The Arduino found the new characteristic successfully after I triggered the sensor. The devices did not disconnect during the entire process.
Note: Be careful not to update or write to the characteristic before it is created.