How to make this plugin more efficient

Instead of checking and updating the feeds every time you do the shortcode, instead register cron tasks for each feed timed to their update schedule. Also saving the feed items as posts, and storing the GUID in the posts meta, then only saving the feed items that are new, will simplify things. It will also let you use WP_Query on posts instead of dealing with feed transients too.