Второй вариант медленный и ненадёжный, потому что GameObject вовсе не гарантирует содержание компонента Script.
Оба случая являются нестатическими полями. Главное отличие от статических - они привязаны к GameObject, на котором весит компонент, а их значения уникальны и независимы между разными копиями этого GameObject.
Использовать статичные поля в контексте GameObject смысла мало. При необходимости рекомендую использовать либо просто статические классы, либо (если их поведение завязано именно на игровом движке/редакторе) ScriptableObject.