Having multiple techniques and picking different ones at runtime is actually fine, but in fact there's a simpler way, which is just to modify the SamplerState from the application side. You can use ID3DX11EffectSamplerVariable to to retrieve the built-in sampler state, then create a modified sampler state with just the filtering/aniso settings changed, and replace the one in the effect with yours. You can have a list of the names of sampler variables that should be affected, or just iterate over effect variables to find all the samplers.
When changing resolution or multisampling settings it's very common for the game to require you to restart for the changes to be applied. The settings are in a config file somewhere and when you start up it reads the desired ones from the file. Alternatively, you can architect your application so that the renderer is a separate component that can be shut down and restarted independent of the application.
For fullscreen resolution, yes, that's probably a reasonable way to do it. Stretching the image to desktop resolution at the end won't cost very much performance, and it avoids having to actually change the user's video mode (although you can do that if you want with the ChangeDisplaySettings Windows API). IMO, the most important thing to remember is to make the rendering aspect ratio match the monitor's aspect ratio so you don't end up with your image being stretched or squished, even if e.g. you use a 4:3 resolution on a 16:9 screen or something like that. Unfortunately, dealing with monitors, resolutions, and aspect ratios is all kinds of annoying, especially if you consider users who have multi-monitor systems. See here if you want to jump down the rabbit hole.