Как лучше хранить телефонный номер в БД?
"Обожаю" такие вопросы.
Начнем с того - сколько у Вас номеров в базе, что Вам актуальна экономия места?
По теме - строки.
Если следовать рекомендация по связи (см. Телефонные коды стран, Телефонный план нумерации), целесообразно хранить полный номер (+добавочный). Полный номер состоит из кода зоны и внутренних номеров, итоговая длина 11 цифр, для отдельной страны (локализованных систем) код зоны от 1 до 3 цифр хранить смысла нет. Итого, под полный номер подходит int8, под локальные может и int4 подходить.
Для добавочных номеров - отдельное поле, тут кто во что горазд.
Номера начинающиеся с нолей, как правило, местные (открытый план нумерации), хранить их нет смысла, т.к. позвонить по ним возможно только находясь в том же регионе. 
Корректнее хранить полный номер и, при необходимости, отдельно, правила преобразования полного номера в местные и обязательно ограничения где это работает.
Хранение в int позволяет на уровне БД исключить ошибки ввода без использования regexp на каждый insert/update, более удобно хранить непрерывные диапазоны.
Однако, если не хранить "весь мир", слабо ощутимая выгода от перехода со string на int при хранении справочника номеров.