Варианты:
1. Хранить как вы описали, придется шариться по базе потом выстраивая граф при каждой оплате.
2. Хранить сразу список рефереров с уровнем (json филдом, например), под ваши требования пойдет, но есть ограничения при дальнейшем расширении
3. Сделать M2M и в промежуточной таблице хранить инфу об уровне рефералов. Тогда вы сможете легко находить и всех рефералов и всех рефереров юзера.
Т.е. промежуточная таблица в М2М будет хранить: referral_id, referrer_id, referral_level.
Плюс при эволюции системы вы скорее всего захотите хранить еще какую-то информацию о рефералах и тогда сделаете отдельную 1-to-1 табличку с реферальным профилем юзера. Ну и М2М тогда будет между реферальными профилями.