Александр,
Получается, что наиболее корректна следующая запись :
{if $product->getCost(null, null, false)>0}
<span class="myCost">{$product->getCost()}</span> {$product->getCurrency()}
{else}
<span class="myCost">Цена по запросу</span>
{/if}
Функция getCost с такими параметрами выдаёт цену (число).
Цена (число) проверяется на условие (больше ли нуля), если да - выводится цена (строка)+ валюта(строка), если нет - выводится текст (строка).
А что же тогда проверяется в условии :
{if !$product->getCost(null, null, false)}
?! Это логическое условие ноль - false, а не ноль - true?