Какая лучше практика для создания уникального числа и запись его в таблицу, с проверкой на уникальность в этой же Таблице?
Во первых - что у вас называется пином? текст, число, какая длина и в каком формате хранится и для чего используется? Насколько это "секьюрная персональная информация"?

интеджер от 5 до 7 символовВ идеале, если это пин, он должен содержать какое-то определенное количество символов. Это удобно по многим причинам.

1 вариант - настроить таблицу на автоинкремент от какого-то пятизначного числа, сделать шаг автоинкремента отличным от единицы и использовать его в качестве пина. Минусы очевидны - привязка к ид, предсказуемость, пляшущая размерность. Плюсы - гарантированная уникальность.

2 вариант - генерация "налету", например через микротайм, или ранд, не суть. В таком случае конечно же не нужно делать проверку через do while, достаточно сделать селект со сгенерированным значением, если запрос вернул строку - перегенерировать, если вернул пустой результат - можно добавлять. В любом случае поле нужно сделать уникальным, дабы избежать повторений.
вы изобретаете дикий костыль: нет необходимости в уникальном пине. 
сам по себе пин - бесполезен. он используется с другими данными, которые в совокупности дадут уникальную комбинацию.