Нет.
Сойдёмся на том, что на уровне дизайна это не всем очевидно. Юньки решили, что так правильно, нам остаётся просто не забывать об этом.
С развитием PackageManager это уже не один кусок, а много маленьких кусочков, пляшем дальше.
Можно на этапе сборки проекта все префабы отключать. Просто держать их выключенными в редакторе не очень удобно - ломаются превьюшки и нужно постоянно его включать при редактировании.
Если объект можно безнаказанно включать после выключения без потери стейта - значит это не удаление ни разу и не нужно это себе так представлять.
В том и проблема, что Юнити пытаются навесить поверх очевидного поведения объектов C# какое-то своё, не очень очевидное поведение. И если с особенностям проверки GameObject на null можно смириться, то в случае с OnDestroy/OnTriggerExit - нет, не надо так.
Выключен, но не уничтожен же. Когда объект просто выключен - он живёт, у него можно дёргать методы, менять его состояние. Логично ожидать, что и OnDestroy будет работать. Ну или хотя бы настройку отдельную для такого поведения нужно добавить.
Самый правильный вариант использования Zenject.
Эх, если бы так можно было сделать... ):
Но они уже сделали RenderPipeline, ждём GameObjectPipepline когда-нибудь, тогда заживём.
У префаба вызвать SetActive(false), чтобы он инстанцировался уже выключенным.
Это вполне себе живая женщина, даже не бабка, но очень старалась. (: