List sort based on another list

You should be able to use a join to produce your desired output. Example using query syntax.

var orderedOptions = from option in options_list
                     join type in types_list
                     on option.Type_ID equals type.ID
                     orderby type.Ordering
                     select option;

List.FindIndex() is your friend when your working with small lists:

var orderedB = listB.OrderBy(b => listA.FindIndex(a => a.id == b.id));

Working example: https://dotnetfiddle.net/CpLeFU

As @goodeye pointed out in the comments, performance will be a nightmare on larger lists. Use the accepted answer in that case.