Each day, a random number is generated. In order to see Mirage Island appear, you have to have a pokémon that matches that randomly generated number...I think the 'stat' that has to match is the hidden value that determines gender, personality and shinyness as well as a Spinda's spot pattern.
So to answer your two questions, nothing can truly be known about what pokémon can see it because it's random, and it'll appear any time of day that you have a pokémon in your party that matches the daily generated number.
By the way, just to make sure, you know that the old man in Pacifidlog who's looking out an eastern window can be counted on to tell you whether Mirage Island is there or not, yes?