There isn't ONE program that'll do it. There are programs like AviSynth that can perform the hardsubbing, but you'll need a program like MeGUI to actually process and put into effect that hardsubbing... if I worded it right.
Anyway, I'd suggest downloading those two programs and going from there.
1.) Download and install the two programs.
2.) In Wordpad, write the following:
DirectShowSource("C:/...path.../your movie.mkv")
LoadPlugin("C:/...path.../vsfilter.dll")
# This filter should be in your Avisynth folder. Just do a quick search for it and you'll find out where it is. #
TextSub(C:/...path.../your subtitle.sub")
3.) Save the file with the extension ".avs". This is your Avisynth script.
4.) Open MeGUI and under "Avisynth script," load up your new script. You should get a preview of your video.
5.) Choose an encoder (I'd use an x264 encoder), choose your settings, and click "Enqueue" (or however it's spelled).
6.) The second tab on top should say Jobs or something. Click on that, and you'll see your encoding job there. Encode the file (it might take a while, depending on how large your file is), and what you get should be a video file that's got the subtitles embedded into it.
7.) If you've got mkvtoolnix (and mkvmuxgui), then go ahead and remux your new video with the audio from the original .mkv. If not, then download those and remux.
8.) You should now have another .mkv file that's identical to your old .mkv, but with embedded subs.