First, some observations and reflections. You can't sightread what you can't play. This may seem obvious, but I've heard people express a wish to be able to sightread music fluently in a way that suggested they thought that if they could just sightread, they'd be able to gain familiarity with musical styles and develop instrumental technique by reading through music which was completely unfamiliar to them. That's not how it works, though. You wouldn't expect a child who couldn't yet speak his or her native language to learn the language by reading aloud from books, and it's a similar situation with music: only after you've become familiar with the elements of a certain kind of music and can manipulate them with facility, can you develop the facility to sightread that kind of music. A corollary of this is that you can't sightread what you can't understand. What does it mean "to understand" written music? That's a deep question; a better way of putting it might be: you can't sightread what you can't recognize. There are a lot of things to recognize. Moreover, there are hierarchies of things to recognize. At the bottom, there are the individual symbols: can you recognize the pitches on the staves? Can you recognize the note values? Then, there are sets, like keys and chords. Then, there are patterns, like melodic motives and chord progressions. Familiarity with the notation builds up from the bottom, but familiarity with the musical reality corresponding to these levels is acquired at all levels at once — not necessarily in the same order as the notation is learned. This means that you could have, for example, an intuitive musical sense that there's a harmonic progression going on without being able to recognize that progression in the notation; or, conversely, you could see in the notation that the pitch A is coming without having any idea what an A will sound like.
Familiarity with musical materials has many aspects. As with many consciously-acquired bodies of knowledge, there is a an intellectual familiarity, like, "yes, I know that D is the second pitch in a C Major scale." But there are several other types of familiarity. There is a temporal familiarity: you can feel that a downbeat is coming at a certain point in the future; seeing a rhythmic symbol can evoke the idea of a pattern of pulses. Related to this is a physical familiarity: having a musical idea suggest a feeling or a motor activity. There is a creative familiarity: a certain musical context may evoke more than just pre-learned reactions; it may suggest a range of novel responses.
An important aspect of familiarity is closing the loop. What does this mean? In the case of notation, looking at the notation of a musical passage should evoke both the "mind's ear" sound of that passage and the intent to perform actions which would produce that passage. Hearing music should evoke both the idea of the notation and the intent to perform the actions which would reproduce it. Playing music should bring to mind the notation. Etc.
If you look at the total amount of data in a musical score and compare this with the human channel capacity for symbolic information (as measured by psychologists and cognitive scientists), you might conclude that sight-reading music is impossible: there's way too much data to process in real time. It's true: there's no way to do it if each symbol is apprehended and processed separately. The only way around this is with chunking. Many of the things people study as part of "music theory" are higher-level musical objects (scales, chords, arpeggios, chord progressions, melodic motives, etc.). There are a couple of ways that musical objects facilitate chunking. The obvious one is: you recognize an object as a gestalt, for example, you recognize a C-major chord as itself, and not as three separate notes. The less-obvious one is: you recognize an object as a context . For example, you recognize that you are in the key of E Major. A context-object reduces the amount of data you have to handle because it reduces the size of the "codebook." Without context, a sequence like E, F#, G#, A, B, C# might be encoded as: "start on E, then go up 2 half-steps, then 2 more, then 1, then 2, then 2," but in the context of E Major, it encodes as: "start on the tonic, step up five times in the key." This kind of encoding is especially valuable when a set of notes can be encoded as: "same thing again" or "same thing again, but up a step."
Okay, so what are the materials? There's no end to the list, but it begins with: pitches, note time values, scales, rhythms, articulations, melodic motives, chords, melodic sequences, chord progressions ...
Oy-oy-oy, how can I ever hope to learn all this? Thankfully, learning music is not a completely bottom-up process; you don't have to learn everything at one level before starting to learn things at a higher level. Also, there's a large amount of learning by analogy — when you've learned something in one context, you often find that you already know how to apply it in another context, without having done any explicit training.
Following are some ideas for organizing the activities that help you gain familiarity with musical materials.
The overview of the process of familiarization is: establish a context, introduce a pattern, repeat, vary.
A collection of contexts: key, harmony, tempo, meter, texture, form ...
A collection of patterns: scale fragments, arpeggio fragments, licks, rhythmic motives ...
A collection of variations: transpose (chromatically, diatonically), double/halve speed, truncate/extend, invert ...
Repeat can be applied in different ways to different aspects of the context, pattern, and variation.
In the context of a key (e.g. G major) and a tempo (e.g. moderato), start playing a scale with your left hand. Vary it by changing the direction. When you reach the place you started, repeat. Vary that by adding the other hand in octaves. Vary the rhythm. Vary the key. Double/halve the speed of one hand with respect to the other.
In the context of a key and a tempo, play an interval (e.g. a third). Repeat. Vary it by moving it up a step (diatonically, within the key). Down a step. Vary it by adding a single note with the other hand, moving in the opposite direction. Vary by having the other hand also play the same interval. Different interval.
Play chords with three fingers in each hand. Vary by inverting the chords (moving the top or bottom note by an octave to the other side). Vary by transposing the chord diatonically. Vary by transposing the chord chromatically.
Play a chord progression in one hand. Repeat. Play something else in the other hand. Switch hands.
Other kinds of variations
There are a couple of ways of leveraging your verbal ability in your musical exercise: to reinforce a channel, and to add a new channel. Reinforcing a channel would be: saying the note names while you're playing them, singing along with the melodies you play, going "da, da, da" (unpitched) to emphasize the rhythms you're playing, etc. Adding a new channel would be: talking (to somebody) while you're playing, saying the beats (independently of the rhythms that are happening with respect to the beats), etc.
Conduct with one hand while playing with the other.
Do something in a harder way (this can make it easier to do it in an easier way). Harder can mean: in a different key, with the roles of the hands reversed, with a different fingering, while holding another note with the same hand ...
Score reading by itself
If you don't feel like playing the piano, you can gain familiarity with notation (at many levels at once) by following along with a score while listening to music. This can be made as demanding an activity as you like. Variations include: sing along (as best you can), tap (on the score) once at the start of each measure, tap the rhythms of the notes in one part; in multiple parts; listen while sitting at the piano and move your hands in an approximation of what you think the pianist's hands are doing; do the fingerings (on a table top or silently at the piano); play along; play along and sing along (same part, different parts).
The relationship of sightreading and improvisation
Imagine that you're reading the part in a play, and you're really getting into the spirit of the drama. You look at your next line while listening to the line of another player, and as the import of the other player's words hits you, you realize: yes, what I'm about to say is just what a person in this situation would feel like saying. You feel like saying it, and you say it with genuine feeling because, even though you didn't actually think of the words yourself, you could have; you understand them and you know how a person who thought them up would feel.
At its best, that's what sightreading is like; the ongoing experience of playing the music puts you in the frame of mind where you could have just about improvised the music yourself. It's like going through the drama of your life with some smarter, more organized, wittier and faster person whispering suggestions of what to say in your ear; things which are exactly what you want to say, and what you'd've thought of to say yourself under better circumstances.
So, when you're learning to sightread, think of it not as slavish response to the demands of the score, but as improvisation guided by somebody with better ideas than yours. And, of course, when you think you have better ideas, stop sightreading and improvise (this is a technique at the heart of the Baroque performance practice).
Looking to notation for inspiration
As part of closing the loop, look to notation for ideas of what to practice. Analyze printed music you're in terms of context, pattern, repetition and variation. Use what you find as a starting point for your exercises.
Put up a white board near your piano, and draw musical staves on it with a permanent marker. Look at a piece of printer music, memorize a passage as notation, copy it onto the white board. Play it at the piano while looking at your transcription. Invent variations; write those variations on the white board.
Keep a musical sketchbook. When you find things you like, write them down and embellish them later. When you find things you don't understand, write them down and ask your teacher about them later.
Do everything by feel (you can also do it by eye, but don't omit the by feel part). Learn to play melodies by feel; then learn to play them with one finger (hopping) by feel, so that you're doing it all by dead reckoning. Same with one finger in each hand (in octaves, two octaves, etc.).
You can only practice a given thing so much at a time, but you can work on several things in parallel.
To move things you're learning from short-term memory to long-term, increase the time between repetitions: immediate, one intervening item, two intervening items, three ... a minute later, five minutes later, an hour later ... the next day ... the next week ...