Minimum variance can be solved simply and efficiently via a quadratic optimizer as the only key input is a covariance matrix.
Drawdown or Sortino cannot be optimized via a covariance matrix unless you assume some functional relationship between co-variances/variances and your risk metric of interest. Likely you'll wind up with a similar portfolio to the minimum-variance under this strategy anyway since under the assumption of a joint normally distributed return, securities with the highest co-variance/variances will also have the highest drawdown.
The optimizer is solving for what set of weights maximizes or minimizes an objective function. So you need to formulate an objective function that represents the expected utility of your portfolio given a set of weights. The utility function would be the sum of its expected alpha and have a penalty for drawdown/sortino. A simple (crude?) way to express the expected drawdown or sortino is to assume that the expected drawdown or or sortino for a security is proxied by the historical drawdown / sortino.
You could use the PortfolioAnalytics package in R to measure the historical risk (drawdown, sortino, etc.) for a function and pass it to an optimizer. This is a bit risky since historical drawdown may not be a good predictor for future drawdown (and you have to account for interactions amongst assets). Now that you have a function for risk, use an optimizer that searches across weight space to see where your objective function is minimized. You need an optimizer that searches across weight space (such as a genetic algorithm or a random portfolio generator) rather than a quadratic or gradient-based optimizer as your drawdown function can probably not be differentiated.
Brian Peterson and Peter Carl have a nice illustration of taking arbitrary objective functions and using a search-based algorithm to solve them here. I think their presentation will help you make the ideas suggested above more concrete in practice.
Update:
If your objective function is convex then a quadratic optimizer such as quadprog or a machine-learning algorithm such as stochastic gradient descent will guarantee a solution. If your objective function is non-convex then you will need to use an alternative optimization strategy (genetic algos, trust-region methods, non-linear optimizers such as NLOPTR, etc.). Several of these other methods do not guarantee convergence (indeed they might find only local optima). They are also considerably more time-consuming. The severity of this issue depends on the nature of your objective function, the time to iterate and ability to solve the optimization in parallel with random seeds, the level of precision you require given the noisiness of your inputs. For example, non-convex optimizers in general are too slow and unnecessary for applications such as High-Frequency Trading. Also, you may find solutions that are inferior to solving simpler quadratic problems where at least you can guarantee an optimum.
Tip: If you choose to use genetic algorithms such as DEOptim, you may want to consider seeding your initial population with solutions to a mean-variance quadratic optimization (along different points of the frontier) to speed convergence.
You can also accelerate the process if you invest in a CUDA GPU to handle parallel operations.