Unfortunately for you (and for everyone else in this situation), you're going to have to create a bootstrap application that checks for the prerequisites and launches their installers where necessary and then launches your installer.
It's doubly unfortunate if your prerequisite needs are dependent on only certain features, rather than the whole package, as it means that you'll have to implement the user interface in the bootstrap application as well. (That was the case with us, but fortunately, we were starting from scratch anyway, so we didn't have to recreate a user interface that we'd already implemented in the MSI. We actually tried a hybrid approach where the first few screens of the UI were in the bootstrap app and the rest were in the MSI, but there were too many frustrations involved, so we gave up on that idea in short order.) With the UI in the bootstrap app, the user would select the features that they want installed, and then the bootstrap app would, if necessary, present a page that says the prerequisites are being installed and install them at that point before going on to the next page. When launching your installer, the bootstrap app feeds it all of the info that was gathered from the UI via command line arguments. You may even wish to put launch conditions into your MSI to prevent it from being run directly except in uninstall or repair situations.