I'm not sure if i understand the question.
If you want to resolve a name you just have to call the resolver() method is the ens smart contract,passing it the namehash of the domain name,then if a resolver exist for that namehash just call the addr() of the designated resolver again passing the namehash.You are right in that since it's just a call and not a tx there is no associated gas cost.
i'm not aware of any other way to do it,afaik there aren't any cached services/lookup tables where you can get the corresponding address without interacting wit the ens contract.
You can also see all the steps needed by using https://mycrypto.com/contracts/interact
then inputing the contract address for the ens: 0x314159265dD8dbb310642f98f50C066173C1259b
copy the ABI and call the resolver function.
If you are looking for online resources to determine what address an ens domain resolves to you can use