Images shouldn't be stored on the blockchain only their fingerprints (if you need it). As you're already suggesting, IPFS is a good solution for that. If you want to learn about IPFS you can start here https://ipfs.io/docs/getting-started/
You could also use BitTorrent or Swarm for this. See this post for the difference between Swarm and IPFS -> What is the difference between Swarm and IPFS?
About transaction times: You can speed this up to some extent by requiring users to pay larger transaction fees. However, even if transactions are immediately included in the next block you will at least have the block times, which are around 15s in Ethereum.