そのメーブル名は良くないけど、それはおいといて。

ショートカットという意味でPostにsub_id持つのは構わないけど、あまりやらないかな。
Postにはmain_id持たせてるから、そこから辿る。それだとこんな感じ。
Post.where(なんちゃら).includes(main: :sub)

で、個々のpostから名前をviewとかで引くなら、
post.main.sub.name
みたいになって長いから、Mainで:nameをdelegateする。
delegate :name, to: :sub
そうすると
post.main.name
と書ける。
もっと短くしたければ、またdelegateするなりメソッド足して工夫して。

上とは別に、省エネするなら、Postにattr_accessor で:name 足して、find_by_sql なりで引いて来る。この場合はincludes()しなくて良くなる。
post.name
使えるはず。