I think what you suggested is a reasonable approach.
Just don’t forget to do model.resize_token_embeddings(len(tokenizer)) after using tokenizer.add_tokens
You can then, as you suggested, train your BERT model with MLM loss on your specific corpus to learn these new embeddings and proceed after that to fine-tune it on different tasks.