I will not worry to much about performance here, but I will optimize the code a bit by calling get_post_meta()
only once. This will not increase or decrease performance as you will see in the post I have linked to later on, but it comes down to the principle of not repeating yourself.
On the contrary to what you are thinking, querying custom fields is quite optimized and really fast as they are cached. It does not matter whether you are calling get_post_meta()
once or a hundred times, the time and amount of queries to get these custom fields stays the same
In short, running a custom SQL query will only decrease performance and not increase it.
You can probably reduce your code to something like the following:
foreach($this->adverisers as $adveriser) {
$meta = get_post_meta($adveriser->ID);
$this->data[$adveriser->name]['image'] = bfi_thumb($meta['ss_advertisers_cats_image'][0]),
$this->imgDimensions
);
$this->data[$adveriser->name]['description'] = $meta['ss_advertisers_cats_description'][0];
$this->data[$adveriser->name]['advertiser'] = $wpdb->get_results( "SELECT DISTINCT * FROM {$wpdb->posts}
WHERE(post_type="brands" OR post_type="boutiques")
AND post_author="{$adveriser->post_author}" ", OBJECT
);
$this->data[$adveriser->name]['advertiserRedirectionLink'] = $meta['ss_advertisers_cats_link'][0];
}
For a full description and reasoning to my madness, take your time and read this post I have recently done on the performance of calling multiple custom fields