Isn’t the way posts are displayed very unefficient?

you could move the loop content into its own file and share that between the different template files using get_template_part()