I guess I will answer it myself and for everyone else who is having this issue.
Starting a Coroutine is the way to go but not by having a magical 3 seconds wait time.
Instead do a while loop like:
while(!interstitial.IsLoaded()
){ yield return new WaitForSeconds(0.2f); } interstitial.Show();
This way the while loop goes on until the ad is loaded and once it is it will show.
Use it with Rewarded ad as well!
Hope this helps anyone who needs this!