Is this what you were suggesting (I used Uniform instead of Dirichlet for starters)?
index_proportions = pm.Uniform("index_proportions", 0, 1,
transform=pm.distributions.transforms.multivariate_ordered,
initval=[0.4,0.6], size=2)
indices = pm.Deterministic("indices",
pm.math.floor(N*index_proportions))
This seems to achieve the effect I wanted (first index has most weight at 0 and decreases as it increases and vice versa for the other). At least almost always. Since there is rounding involved, even if the index_proportions satisfy x<y it is possible that pm.math.floor(x) = pm.math.floor(y). I guess when there are only two indices, one can floor the first one and ceil the other but that would not work beyond sampling two indices. In any case, I can work with the off chance of indices being the same once in a while.
I also tried Dirichlet as such:
index_proportions = pm.Dirichlet("index_proportions", a=[1/4,3/4],
transform=pm.distributions.transforms.multivariate_ordered,
initval=[1/4,3/4])
but this was sampling almost exclusively 0 for the first index and others for the second index.