Essendo javascript procedurale, a regola il setInterval non dovrebbe partire prima che le istruzioni che lo antecedono non siano (se sincrone) tutte espletate.

Ad ogni modo setInterval parte quando gli dici di partire, cioè appena lo invochi.
Se per un qualche motivo l'ordine procedurale è ancora in corso mentre setInterval parte, il problema è facilmente aggirabile: lasci che setInterval parta, ma ci metti dentro una espressione condizionale che verifichi che il dato che vuoi esista e, se non esiste, ci metti return false.

A questo modo setInterval parte, sì, ma all' atto pratico non fa nulla finchè la variabile che vuoi non ha il valore che vuoi.

Nel tuo esempio ad ogni modo devi essere sicuro che funzionelunghissima restituisca davvero (return) 1 come numero affinchè
if(controllo==1){/*codice*/}
else{return;};

Insomma, non vedo il problema in realtà, a meno che tu non voglia spiegarlo meglio nel caso questa risposta non ti soddisfi.