Top-level функции/свойства живут в файле (JVM: FileNameKt); companion группирует static-like API вокруг типа.
Разбор
- Utils без состояния — top-level/extensions.
- Factory/const, связанные с типом — companion.
@file:JvmName для Java-имени файла.
- Не тащите всё в companion «как в Java static».
Итог
Выбирайте companion, когда принадлежность типу важнее файла.