Use WP_Query or query_posts() or get_posts() for optimizing a site?

This answer explains the differences. They all use WP_Query, all parameters being equal there is no difference in speed, it’s just a question of which is easier for you for your particular needs (hint: it will never be query_posts, which should basically never be used).

You should query the database as few times as possible, so if you can fetch all your posts with a single query, then do some manipulation via php to get the output you need, that is definitely what you should do versus creating multiple queries. Note that a WP_Query object contains some helpful vars to assist in output, like $query_object->post_count and $query_object->current_post.

You should also be employing a cacheing plugin, like W3TC, if server load is an issue.