An alternative is to build a mask by combining boolean masks for each individual level of the multi-index. For example:
mask = df.index.get_level_values(0).isin(['A', 'D'])
mask = mask & df.index.get_level_values(1).isin([1, 2])
result = df.loc[mask, :]