質問3についてですが、一応できるのですが、可能ならそれは避けた方が無難です。今回のモデルでは実行中に変数を書き換える必要は無いかと思います。
質問2についてですが、今の方法でも問題はありませんが、「Terminate Function」ブロックを使うとすっきりしたモデルになります。以下のように構成すれば、シミュレーション終了時にワークスペースにmapを保存してくれます。
Terminate Functionの中身
実行後のワークスペースにoutというオブジェクトが作成されており、その中にmap_dataがあります。
質問1についてですが、確かに見せていただいた通りにモデルを作ると、簡単なモデルでも実時間の6倍ぐらいの時間がかかってしまっています(test_model.slxとmy_script.mです。バージョンはR2022aで作成しました)。
シンプルな改善方法としては、シミュレーションモードを「ラピッドアクセラレーター」に設定することです。これにより、私のPCでは実時間ぐらいで実行できるようになりました。
全体をラピッドアクセラレーターモードで実行するのが不都合であれば、MATLAB Functionの所だけ参照モデル化し、そのブロックをアクセラレーターモードに設定することで、同じような高速化の恩恵を得ることができます。(test_model_2.slx, log_model.slx)
もし可能なら、mapのサイズを減らしたり、記録のためのサンプリングタイムステップを長くしたりすることで、より高速化できます。
以上、参考になりましたら幸いです。