Not so clear after all :-(
If I understand this correctly from Ingo's comments, calls within template controls are cached in the template layer, so <% if RelatedPages %><% control RelatedPages %>... is OK.
With a bit of luck, resultsets are cached in MySQL, depending on hosting... But to up performance within the model/controller we should provide our own caching? So to access a resultset from throughout code, we should do something like this:
protected cachedRelatedPages = null;
function getRelatedPages() {
if (empty ($this->cachedRelatedPages)) {
$this->cachedRelatedPages = $this->RelatedPages();
}
return $this->cachedRelatedPages;
}