It can not be implemented as a form alter... as it is a field on in profile and I think it should be a real field, so profiles can be used an normal entities.

So I think the correct solution would be to add a new hook, as you described first.