Based on what you are wanting, MarkupList is probably the best bet for you. The question is why is the MarkupList slow. A couple possibilities I can think of is: the loaded url is taking a long time to load, or there is something in "itemComponent" that is taking an abnormally long time to complete.
To check if it is the url I suggesting doing what you did with the LabelList and just put them in the package. If it is the icons and you want to load from the url, you could take a look into cachefs and just put the icons into cache at the start of the App. Take note though, that cachefs has a limited space and will remove items if the space is needed.
To look into if there is something slow in the "itemComponent" you could utilize Roku's profile visualizer. Or you could utilize the roTimeSpan to find the time it takes particular sections of code.
If none of that is helpful the only other things I can think of is: building your own list by extending ArrayGrid , or just hard code via posters and labels, both of which are not ideal.
Hope this is of some use.