When I did stuff like this, I always just created a wrapper function that does the parameter passing.
That would be replacing
[t,y] = ode45('bistabilitymin2', [t0 tfinal], y0, [], p);
with
bistabilityWrapper = @(t,y) bistabilitymin2(t,y,p);
[t,y] = ode45(bistabilityWrapper, [t0 tfinal], y0);
Essentially, the anonymous function passes the parameter p into the function, and then you use the anonymous function as an input to ode45.