99 Varieties of Dosa
Python 2, 503 496 487 485 479 476 bytes



for l in[a+'86'[i&lt;2:1+i%2][::2*('v'in a)-1]+b for i in(0,1,2,3)for a,b in[l.split('~')for l in('~11~'[i&lt;2::2]+'0|Spring ~Vegetable |73~|13~|03~|:3~|Mixed 3~|~7|~27|~17|;4~|;42~|;45~|~Tomato 1|~21|~Chutney |2'+'45~|~20|~:0|~0|Jain ~|Pav Bhaji ~|5~|59~|'[i&lt;3:]+'&lt;~~&lt;'[i%2::2]).split('|')]]+['682:0','69','698']:
 for i in range(13):l=l.replace(chr(48+i),'Masala Onion Schezwan Uttappam Corn Mushroom Paneer Sada Cheese Chilli Mysore Sweet Kerala'.split()[i]+' ')
 print l+'Dosa'


Try it online!

Every dosa is of the form a [Paneer, Cheese] b Dosa

Each dosa is then encoded in a list of tuples of (a,b). There are many dosa where a or b is empty.

For each of these tuples, every combination of Paneerand Cheese is added in between them. 


.. '86'[i&lt;2:1+i%2] .. for i in(0,1,2,3) ..


The few special cases which are slightly different are:


Kerala Dosa, Kerala Cheese Dosa vs Paneer Kerala Dosa, Paneer Cheese Kerala Dosa


Kerala is moved from a to b if we have Paneer
.. '&lt;~~&lt;'[i%2::2] .. which gives ['Kerala',''] or ['','Kerala']

Schezwan Corn Mushroom Paneer Cheese Dosa


Corn is inserted if we have Paneer Cheese
.. '4..'[i&lt;3:] ..

Onion Masala Dosa, Onion Paneer Masala Dosa vs Cheese Onion Masala Dosa, Paneer Cheese Onion Masala Dosa


Onion is moved from a to b if we have Cheese
.. '~11~'[i&lt;2::2] .., similar to Kerala above

Pav Bhaji Cheese Paneer Dosa


Paneer and Cheese are swapped if a is Pav Bhaji
.. '86'[i&lt;2:1+i%2][::2*('v'in a)-1] ..

Paneer Cheese Schezwan Mysore Masala,Paneer Chilli,Paneer Chilli Cheese


These are too different to account for, and are just added to the list at the end.
.. +['682:0','69','698']



At the end, the numbers are replaced with the correct words:

0123456789:;&lt; -> Masala Onion Schezwan Uttappam Corn Mushroom Paneer Sada Cheese Chilli Mysore Sweet Kerala