If you are willing to be a bit flexible about what you define as a 'rocket' and embark on some fairly (OK, very) mad science, then there is indeed a well-defined limit to efficiency. The most efficient possible 'rocket' you can make is something which emits light, and which does it by consuming mass with complete efficiency, so all the energy implicit in the mass is turned into light. The way to do that is to have your rocket be fuelled by equal amounts of matter and antimatter (but even then you probably can't get very close).
If you can do the annihilation completely efficiently, so that all you get out is photons, and you can arrange life that all these photons contribute to your momentum (see notes below), then you get this equation:
$$\frac{m_0}{m_f} = \frac{1 + v/c}{\sqrt{1 - v^2/c^2}} - 1$$
Where $m_0$ is the launch mass, $m_f$ is the final mass and $v \lt c$ is the final velocity.
That's the best you can do: a rocket which consumes mass completely efficiently and spits out light. Here's a plot of the mass ratio ($m_0/m_f$, the plot calls this 'mass fraction' which is wrong, sorry) of this for $v \in [0, 0.9]$ with $v$ in units where $c = 1$ (or alternatively I forgot to label the axis as $v/c$).

Why this isn't practical. Well, there are a very large number of reasons why a system like this is not practical: this is very much a mad science idea.
Production and storage of macroscopic amounts of antimatter is challenging, to put it rather mildly. I don't know how much antimatter has ever been produced but it's a small amount. Storing it in large quantities is going to be really hard (I really don't have any idea how you'd do it at all), and the cost of making a mistake is appalling: you really do not want the power to fail in your antimatter storage system if you have any macroscopic amount of the stuff.
The 100% efficiency thing is a problem. If you collide a proton with an antiproton what you actually get is some shower of unstable particles, which I think eventually must all decay to light, but only if you can arrange for them to be near each other for long enough. And some of them, for instance, are neutrinos, which are not easy to contain, to put it rather mildly.
If you collide electrons and positrons, you do just get light. But you now have the problem that a lot of the light that is produced is in the form of very high energy photons (gamma rays) and these are very hard to reflect efficiently with any kind of mirror you can plausibly make. And also you need to store a lot of electrons and positrons, either by attaching them to protons / antiprotons as hydrogen / antihydrogen, in which case what do you do with the protons and antiprotons (which are almost all the mass!) left over, or by some approach mad even by the standards of mad science.
But, well, this is the theoretical limit: you can't do better than this, even in principle, with anything that might count as a rocket, short of radically new physics.